日期:2014-05-16  浏览次数:20366 次

Firefox与IE在Javascript编写上的区别
1.加载事件
  IE:
document.body.detachEvent("onclick",onclickfunction);
document.body.attachEvent("onclick",onclickfunction);

  Firefox
document.body.removeEventListener("click",onclickfunction, true);
document.body.addEventListener("click",onclickfunction, true); 

  第三个是一个布尔值,true表示指定的事件处理函数在捕获阶段执行,false表示在冒泡阶段。
  两者第一个参数, 事件名称不一样,detachEvent用的是onclick, removeEventListener用的是click,没有'on'。
  两者可对执行的优先级不一样。
btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent("onclick",method2);
btn1Obj.attachEvent("onclick",method3);

  执行顺序为method3->method2->method1

  如果是Mozilla系列,并不支持该方法,需要用到addEventListener var btn1Obj =
btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener("click",method2,false);
btn1Obj.addEventListener("click",method3,false);

  执行顺序为method1->method2->method3

2.关于window.event
在Firefox中没有window.event变量,他的事件变量必须通过参数传输.
如果想获取事件的元素在IE中通过event.srcElement,但是在FF中得用e.target.
以下是例子:
input.addEventListener("click",test,false);
function test(e){
var e = window.event||e;
var srcElement = e.srcElement || e.target;
}

<input onclick="test(event)">


3.eval() 与 window.execScript()]
  1. 在 FireFox 下 window.execScript() 函数不能运行,而 eval() 在两个浏览器下都能正常运行;
  2. window.execScript() 所执行后的脚本上文是针对整个全局域的,而 eval() 对字符串脚本执行的上下文只针对于调用 eval 函数本身的上下文;
  如果在任何执行eval的上下文中将变量直接定义成 window 下的某个“属性”即可成为全局变量。例如:
function test() 
{ 
eval("window.a = '全局变量';"); 
eval("window.b = function(){alert('全局函数');}"); 
}

4.关于解析xml文件(此方法为转载)
由于Firefox的XMLDocument对象没有loadXML,selectNodes,selectSingleNode的方法,Element对象也没有selectNodes,selectSingleNode的方法。所以我们更改他们的原型,增加相应的方法。由于创建XMLDocument的方法也不相同,所以增加方法createXMLDoc来创建XMLDocument。获取元素值的方法也不同,所以增加getElementValue方法。
var  isIE  =   document.all && window.external;
function createXMLDoc(){
    var xmlDoc;
    var moz = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined');
    var ie = (typeof window.ActiveXObject != 'undefined');
    if (moz) {
        xmlDoc = document.implementation.createDocument("", "", null);
    }
    else 
        if (ie) {
            xmlDoc = new ActiveXObject("MSXML2.DOMDocument.3.0");
            xmlDoc.async = false;
            while (xmlDoc.readyState != 4) {
            };
                    }
    return xmlDoc;
}
function getElementValue(item){
	if(isIE){
		return item.text;
	}else{
		return item.childNodes[0].nodeValue;
	}
}
if ( ! isIE){
      XMLDocument.prototype.loadXML = function(xmlString)
     {
        var childNodes = this.childNodes;
        for (var i = childNodes.length - 1; i >= 0; i--)
            this.removeChild(childNodes[i]);

        var dp = new DOMParser();
        var newDOM = dp.parseFromString(xmlString, "text/xml");
        var newElt = this.importNode(newDOM.documentElement, true);
        this.appendChild(newElt);
     };

    // check for XPath implementation
    if( document.implementation.hasFeature("XPath", "3.0") )
     {
       // prototying the XMLDocument
        XMLDocument.prototype.selectNodes = function(cXPathString, xNode)
        {
          if( !xNode ) { xNode = this; } 
          var oNSResolver = this.createNSResolver(this.documentElement)
          var aItems = this.evaluate(cXPathString, xNode, oNSResolver, 
                        XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
          var aResult = [];
		  aResult.length = aItems.snapshotLength;
          for( var i = 0; i < aItems.snapshotLength; i++)
           {