window.onresize
在IE浏览器下有多次被执行甚至死循环的bug,会导致浏览器卡死

在写跨浏览器的js程序中,检测浏览器是一个很重要的工作。我们不时要为不同的浏览器写分支代码。
如下是一种:

解决方案:复制代码 代码如下://
IE浏览器下将onresize事件放在div上if(navigator.userAgent &&
navigator.userAgent.toLowerCase{ document.body.innerHTML = ‘

复制代码 代码如下:

‘ + document.body.innerHTML; } else { window.onresize = function;
lazyLoadImgesMethod();
};}ps:FF浏览器不支持在div上写onresize事件,window.onresize
虽然在FF下不会死循环,但如果在函数里面有alert执行,FF浏览器也会卡死,很无奈的bug。

//添加事件工具函数
function addEvent(el,type,handle){
    if(el.addEventListener){//for standard browses
        el.addEventListener(type,handle,false);
    }else if(el.attachEvent){//for IE
        el.attachEvent(“on”+event,handle);
    }else{//other
        el[“on”+type]=handle;
    }

PS: navigator.userAgent.split.indexOf>-1 这个判断ie的问题,
在chrome浏览器下会出现”toLowerCase()”方法未定义的错误.

}

所以修正为navigator.userAgent.toLowerCase>-1

1,第一种检测浏览器方式称为 user-agent
检测方式。是最古老的,它检测目标浏览器的确切型号,包括浏览器的名称和版本。其实就是一个字符串,用navigator.userAgen或navigator.appName获取。如下:

复制代码 代码如下:

function isIE(){
    return navigator.appName.indexOf(“Microsoft Internet Explorer”)!=-1
&& document.all;
}
function isIE6() {
    return
navigator.userAgent.split(“;”)[1].toLowerCase().indexOf(“msie
6.0″)==”-1″?false:true;
}
function isIE7(){
    return
navigator.userAgent.split(“;”)[1].toLowerCase().indexOf(“msie
7.0″)==”-1″?false:true;
}
function isIE8(){
    return
navigator.userAgent.split(“;”)[1].toLowerCase().indexOf(“msie
8.0″)==”-1″?false:true;
}
function isNN(){
    return navigator.userAgent.indexOf(“Netscape”)!=-1;
}
function isOpera(){
    return navigator.appName.indexOf(“Opera”)!=-1;
}
function isFF(){
    return navigator.userAgent.indexOf(“Firefox”)!=-1;
}
function isChrome(){
    return navigator.userAgent.indexOf(“Chrome”) > -1; 
}

2,第二种称为 对象/特征
检测方式,这是一种判断浏览器能力的方式,也是目前流行的方式。即在使用一个对象之前检测它是否存在。上面提到的addEvent方法中就使用了该方式。.addEventListener是w3c
dom标准方式,而IE使用自己特有attachEvent。以下列举几个:

a,talbe.cells只有IE/Opera支持。

b,innerText/insertAdjacentHTML除Firefox外,IE6/7/8/Safari/Chrome/Opera都支持。

c,window.external.AddFavorite用来在IE下添加到收藏夹。

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注