给iframe注册onfocus onresize 事件,解决非IE浏览器不兼容问题
iframe在应用的时候,非IE得浏览器不支持 onresize onfocus onblur 等事件只有onload都支持 故需给iframe注册事件
if(document.all){ //IE
obj.attachEvent("onresize",Fun);
obj.attachEvent("onfocus",Fun);
}else{ //非IE,用于ff 谷歌等
obj.contentWindow.addEventListener("resize",Fun,false);
obj.contentWindow.addEventListener("focus",Fun,false);
}
function Fun(){
alert("d");
}
if(document.all){ //IE
obj.attachEvent("onresize",Fun);
obj.attachEvent("onfocus",Fun);
}else{ //非IE,用于ff 谷歌等
obj.contentWindow.addEventListener("resize",Fun,false);
obj.contentWindow.addEventListener("focus",Fun,false);
}
function Fun(){
alert("d");
}
试了一下果真可以直接触发,效果跟在IE下的一样。回过头去分析了一下代码,发现firefox中原来iframe上的事件挂到了iframe中的contentWindow中去了,与真接在html元素里面写事件属性相比,IE可能把iframe上的事件关联到了contentWindow上了,可firefox却不是这样的,还是各是各的。这样带来的问题是firefox想要给iframe加事件只能够用脚本去加了。
本来以为IE和firefox中对iframe的事件这部分定义不一样,回头去再去看看了HTML4.0中关于iframe的定义,果真是iframe上面就没有任何事件的定义,看来是IE顺手给加上的。firefox号称最符合html标准,那么写在iframe上的“事件”没有任何响应,自然也是合情合理的。DHTML手册上有一句话,由于没有“window”元素,body 元素将作为下列 window 对象事件的宿主:onblur, onbeforeunload, onfocus, onload 和 onunload。可HTML4.0里面body是有这两个事件的,所以也就不难解释为什么用脚本给iframe的contentWindow挂上事件就可以触发了,实际上这个事件是来自于contentWindow里面的body元素。
浙公网安备 33010602011771号