免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2603 | 回复: 0
打印 上一主题 下一主题

JSI API之BrowserInfo、EventUtil讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-29 14:11 |只看该作者 |倒序浏览
引用
JSI 自身提供一些常用API,数量极少,尽量以一种正式的风格提供,尽量回避争议。
有些是启动文件用到的,如任务队列支持,还有如装饰引擎直接用到的,如BrowserInfo、EventUtil、StyleUtil等。
对于启动文件中未直接用到的,如果风格的争议太大,都将剔除出去。


BrowserInfo对象:
Java代码
/**  
* BrowserInfo 对象,用于判断浏览器的相关信息,如浏览器类型、quirks模式、客户端语言(简体中文?英语..未实现)、操作系统(未实现)等等。  
* @public  
*/  
var BrowserInfo = {   
  isIE : falseChecker,   
  isOpera : falseChecker,   
  isGecko : falseChecker,   
  isNetscape : falseChecker,   
  isMozilla : falseChecker,   
  isFirefox : falseChecker,   
  isKhtml : falseChecker,   
  isSafari : falseChecker,   
  isKonqueror : falseChecker,   
  isQuirks : function(){…}   
};  

/**
* BrowserInfo 对象,用于判断浏览器的相关信息,如浏览器类型、quirks模式、客户端语言(简体中文?英语..未实现)、操作系统(未实现)等等。
* @public
*/
var BrowserInfo = {
  isIE : falseChecker,
  isOpera : falseChecker,
  isGecko : falseChecker,
  isNetscape : falseChecker,
  isMozilla : falseChecker,
  isFirefox : falseChecker,
  isKhtml : falseChecker,
  isSafari : falseChecker,
  isKonqueror : falseChecker,
  isQuirks : function(){…}
};
其中最常用的要数 is<浏览器类别>(最小版本号码,最大版本号)。
此外,我还将BrowserInfo的函数拷贝到navigator对象上,这个有无必要呢?
Java代码
//@Deprecated ???   
for(var n in BrowserInfo){   
  window.navigator[n] = BrowserInfo[n];   
}  

//@Deprecated ???
for(var n in BrowserInfo){
  window.navigator[n] = BrowserInfo[n];
}

不同之处:
现在在浏览器判断上面,一般是用常量表示,比如isIE之类的,JSI的BrowserInfo使用函数,以便提供更强大更灵活的功能。

EventUtil
EventType 对象的成员函数有:

Java代码
addListener(el, type, fn, cap)   
removeListener(el, type, fn, cap)   
  
add<Eventtype>Listener(element, listener, captrue)   
如addLoadListener,addMousedownListener,addMouseoutListener      
remove<Eventtype>Listener(element, listener, captrue)   
createEvent(type, canBubble, cancelable)   
dispatchEvent(el, even)  

addListener(el, type, fn, cap)
removeListener(el, type, fn, cap)

add<Eventtype>Listener(element, listener, captrue)
如addLoadListener,addMousedownListener,addMouseoutListener        
remove<Eventtype>Listener(element, listener, captrue)
createEvent(type, canBubble, cancelable)
dispatchEvent(el, even)
其中: <Eventtype>代表一种事件类型。
W3C事件类型有:
Java代码
var events = ['click','mousedown','mouseup','mouseover','mousemove','mouseout','load','unload','abort','error','select','change','submit','reset','focus','blur','resize','scroll'].   
             concat(['DOMFocusIn','DOMFocusOut','DOMActivate']);  

var events = ['click','mousedown','mouseup','mouseover','mousemove','mouseout','load','unload','abort','error','select','change','submit','reset','focus','blur','resize','scroll'].
             concat(['DOMFocusIn','DOMFocusOut','DOMActivate']);

此外,还添加了一种事件类型:DOMLoad。就是mozilla的DOMContentLoaded事件,在Dom树构造完成但图片资源等可能未完成时触发。
对于这种事件类型, element, captrue参数都将忽略。暂时只有添加函数,没有删除函数(有删除的必要吗?)。

不同之处:
这个事件处理函数集与其他常见方式的却别有:
1. this支持。IE的attach方法添加的函数,运行时this指向window对象,JSI吧这点给纠正过来,与w3c的addEventListener行为一致。
2. 事件类型直接体现在函数名中,这样有利于书写上的错误及早发现。
3. 事件格式化,将事件的访问方式格式化为W3C的方式。
4. 自动清理,这也不算不同吧,现在大多数JS库都提供这个功能,就是在离开页面时清理全部注册事件。但是这对一些单页程序是无效的(OPOA,本人也比较讨厌这种模式,呵呵),以后是否可以提供一个purgeElement函数,用于清理指定元素及其子元素的事件呢?


程序下载

这个API也可以脱离JSI使用,只是,在编写的时候,因为有了JSI的保护,我使用了不少内部变量,为避免可能的冲突,做了如下处理。
Java代码
var BrowserInfo = function(){   
  //#include(browser-info.js)....   
  return BrowserInfo;   
}   
  
var EventUtil = function(){   
  //#include(event-util.js)....   
  return EventUtil;   
}  

var BrowserInfo = function(){
  //#include(browser-info.js)....
  return BrowserInfo;
}

var EventUtil = function(){
  //#include(event-util.js)....
  return EventUtil;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP