Fdream's Blog
专注于WEB前端开发
Powered by Google
1 2 3 4 5 6 7 8 9 10

在一个iframe中,有这样一段js:

参考代码: [复制代码] [保存代码]

var clear_btn = parent.document.getElementById('clearbtn');
clear_btn.onclick = function () {
    //...
    PSearch.clearResult(); // PSearch这个对象在该页面引用的js文件中,全局变量
    //...
};

当在我的IE 7下的时候居然会out of memory,而在clearResult中并没有干任何事情!在IE 8下的时候,却是找不到PSearch,很诡异……突然想起曾经碰到过类似的问题,于是改成这样...

Mootools一个小bug
17 多云 2008-9
Fdream 发表于 Ajax Web, 已被阅读 1264 次评论 0 条
关键词:javascript mootools

在Mootools 1.2正式版中,有一个很小很诡异的bug,一般碰不上这么bt的事情。在页面里面有iframe,并且会涉及到跨域的问题时,若在页面执行过程中改变代理脚本,在改变代理脚本的前后会出现JavaScript线程假死的情况——所有的JavaScript事件都会失去响应,而此时若还原默认的脚本设置,则又可恢复正常。后来发现问题出在Event对象中,有这么几行:

参考代码: [复制代码] [保存代码]

win = win || window;
var doc = win.document;
event = event || win.event;

经测试,发现在这里居然取不到win.document——拒绝访问(Permission Denied)!打印了一下win的属性,发现已经是被mootools打包后的window对象了,但不知为何里面的所有属性都是拒绝访问。直接很裸地试着直接取“document”,居然成功了!修改此段代码如下:

简单的测试,但是Chrome的JavaScript运行效率的确是太惊人了!贴几张图,对比一下,分别是Chrome 0.2 Beta, IE 7, Firefox 3:

Chrome:

偶然发现,在IE 7下,打开本地页面时,居然会出现onload事件发生在ondomready的前面!而在FF下,ondomready一直发生在onload事件以前,诡异的IE,不得不再写两行代码来判断js是不是已经执行过初始化方法了……

想写一个Mootools的select插件,和html里的select类似的功能,不过能够完全自己定制界面,而且不会像默认控件一样永远在最高层。在实现一个功能时,当时由于思维出了点偏差,碰到一个奇怪的问题:到底是onclick事件先发生还是onblur事件先发生呢?

假设有两个div,id分别为a和b,在a上绑定onclick事件,在b上绑定onblur事件,事先通过focus()方法让光标聚焦在b上,这样,当点击a时,将分别发生onclick和onblur事件,但是,哪个会先发生呢?

特别在IE和Firefox下测试了一下,测试结果比较诡异:

在IE6下:onblur和onclick事件的发生顺序是完全随机的,有时候onblur在前,有时候onclick在前,但两者的次数差不多是相同的;

在FF2下:始终是onclick事件在前。

最近几天和另外一个同事在写Mootools 1.2beta2的注释文档,总算基本完成了,show一下在vs 2008下的intellisense:

创建一个新的实例:

相关参数:

第二个参数...

VS 2008的新增的一个巨大特性就是增加了Javascript的调试功能(见:VS2008中JavaScript的智能提示和调试很强大)。没有细说有多强大,其实这种提示和调试可以强大到和VS中的C#一样,javascript的 Intellisense甚至可以跨文件,自动识别类型。不过你的注释得写成这样:

引用内容:

function Element(element, properties){

///<summary>

/// Element类,创建一个HTML Element实例

///</summary>

///<param name="element" type="mixed">Element的标签名或者一个当前的DOM元素</param>

///<param name="properties" type="object">可选:Element的属性集合,如{'href': 'http://pplive.com', 'class': 'myClass'}</param>

///<returns type="Element"/>

}

这样,当你new一个Element的时候,会出现关于Element这个构造函数作用的提示,键入第一个括号以后,会出现参数提示,键入最后一个括号,再键入一个点,就会出现这个类的所有属性和方法提示。可以跨文件提示,实在是很好用~

如果在一个DOM对象上同时绑定单击(click)和双击(dblclick)事件,当在这个DOM对象上发生双击事件时,在IE下和在Firefox下将出现不一样的现象:

在IE下,第一次点击(click)会触发一次单击(click)事件,第二次点击(连续的)将会触发双击(dblclick)事件,并不触发单击事件(click);

在FF下,第一次点击(click)会触发一次单击(click)事件,第二次点击(连续的)也会触发双击(dblclick)事件,与在IE下不同的是,这次还是会触发单击(click)事件。

当需要在DOM上同时绑定单击和双击事件时,只有自己写代码实现了:

第一次点击记录下点击的时间,并设置单击事件的Timeout(250ms比较合适),第二次点击时判断此时点击的时间与上次点击的时间间隔,如果小于指定的事件间隔(比如250ms),则判断为双击事件,并clear已设置的Timeout(避免触发单击事件)。

记录点击时间需要注意的一点,就是在IE下,你必须同时绑定单击和双击事件来记录点击时间,而在Firefox下你只需要绑定单击事件来记录每次点击时间,原因写在文章的开头了。

1 2 3 4 5 6 7 8 9 10
Copyright © 2005-2008,Fdream All Rights Reserved
Processed in 0.156248 second(s) , unknow queries
Powered by OWord V0.1, Even Not Alpha
(此博客程序为半成品,请勿索取,以免给您的心灵造成创伤^_^)
鄂ICP备05026031号