淘宝商城(天猫)高级技术专家.3年研发+3年性能测试调优/系统测试+4年团队管理与测试架构、研发系统实践. 新舞台新气象, 深化测试基础架构及研发架构,希望能在某个技术领域成为真正的技术大牛。欢迎荐才http://bbs.51testing.com/viewthread.php?tid=120496&extra=&page=1 .邮件: jianzhao.liangjz@alibaba-inc.com,MSN:liangjianzhao@163.com.微博:http://t.sina.com.cn/1674816524

javascript 在Firefox 3.0与IE6 脚本下不同表现以及解决方法

上一篇 / 下一篇  2008-10-09 23:24:10 / 个人分类:java性能监控与调优

1.1      getElementById区别

<select name="month">  

<option>Jan</option>  

<opton>Feb</option>  

</select>  

<select name="month">

<option>Jan</option>

<opton>Feb</option>

</select>

 

IE中:

document.getElementById("month")正确

document.getElementsByName("month")正确

 

Firefox:

document.getElementById("month")错误(必须加属性Id)

document.getElementsByName("month")正确 

 

故通用方法编写标准html语法,然后用document.getElementById.

 

1.2      FireFox支持vbscrīpt

 

 

1.3      Firefox定位form

 

Form定义  <form name="userlist" id="userlist" method="post" action="userlist.do">

 

仅仅IE支持直接访问:

 

userlist.pageSize.value="20";

       userlist.submit();

 

 

通用函数

      function goto(p) {

       document.forms["userlist"].page.value=p;

       document.forms["userlist"].pageSize.value="20";

       document.forms["userlist"].submit();

}

 

 

 

1.4      事件函数

 

仅仅IE支持document.onclick(){这种方式书写。

 

 function document.onclick(){

    with(window.event.srcElement){

   if (tagName != "INPUT" && getAttribute("Author") != "tiannet")

   tiannetHideControl();

    }

  }

FireFox上提示:missing ( before formal parameters,javascrīpt error

 

 

1.5      Console关键字

 <scrīpt  type='text/javascrīpt'>  

   

 var  http_request=null;

 alert(console); 

 var  console=null;  

 

</scrīpt>

 

firefoxconsole为一个对象

setting a property that has only a getter

 

 

 

 

IE表现为未定义

 

 

1.6      事件处理

 

http://www.phpchina.com/12834/viewspace_29308.html

http://www.javaeye.com/topic/47917

 

 

如:

 

function getEvent(){    //同时兼容ieff的写法

       if(document.all)   return window.event;        

       func=getEvent.caller;            

       while(func!=null){    

           var arg0=func.arguments[0];

           if(arg0){

               if((arg0.constructor==Event || arg0.constructor ==MouseEvent)

                   || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){    

                   return arg0;

               }

           }

           func=func.caller;

       }

       return null;

}

 

 

   //任意点击时关闭该控件

  document.onclick=function(){  

   var ōbjevent= getEvent();  //window.event ;//getEvent();

   

   

    if( typeof(objevent.srcElement) == "undefined")

    {

          with(objevent.target)

          {

                       if (tagName != "INPUT" && getAttribute("Author") != "tiannet")

                       {

                                           tiannetHideControl();

                       }

          }

        }

        else

    {   

         with(objevent.srcElement)

          {

                       if (tagName != "INPUT" && getAttribute("Author") != "tiannet")

                       {

                                           tiannetHideControl();

                       }

          }     

    }

  }

 

 

 

1.7      Document.all

IE特有:

document.all.selTianMonth

 

通用

document.getElementById('selTianMonth')

 

1.8      innerText

http://www.cnlei.org/blog/article.asp?id=425

 

Firefox下的DOM对象增加innerText属性:

<scrīpt type="text/javascrīpt">

var lBrowser = {};

lBrowser.agt = navigator.userAgent.toLowerCase();

lBrowser.isW3C= document.getElementById ? true:false;

lBrowser.isIE = ((lBrowser.agt.indexOf("msie") != -1) && (lBrowser.agt.indexOf("opera") == -1) && (lBrowser.agt.indexOf("omniweb") == -1));

lBrowser.isNS6 = lBrowser.isW3C&& (navigator.appName=="Netscape") ;

lBrowser.isOpera = lBrowser.agt.indexOf("opera") != -1;

lBrowser.isGecko = lBrowser.agt.indexOf("gecko") != -1;

lBrowser.ieTrueBody =function (){

 return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;

};

//Firefox下的DOM对象增加innerText属性

if(lBrowser.isNS6){ //firefox innerText define

 HTMLElement.prototype.__defineGetter__( "innerText",

 function(){

 return this.textContent;

 }

 );

 HTMLElement.prototype.__defineSetter__( "innerText",

 function(sText){

 this.textContent=sText;

 }

 );

}

alert(lBrowser.isNS6);

</scrīpt>

 

1.9      eval

创建过程:

 

  for (var i=0;i<5;i++) {

   document.write (' <tr align=center id="trTiannetDay' + i + '" >');

   for (var j=0;j<7;j++){

    document.write('<td align="center" id="tdTiannetDay' + n + '" '+

   'onClick="tiannetDay=this.innerText;tiannetSetValue(true);" '

     +' style="' + s_tiannet_day + '">&nbsp;</td>');

    n ++;

   }

   document.write (' </tr>');

  }

 

 

IE特有:

 for (var i = 0; i < 35; i++){

 eval("document.all.tdTiannetDay"+i);

      

 

通用:

    var ōbjname="tdTiannetDay"+ i;

    var da = eval( document.getElementById(objname)); 

 

      if (typeof(da) == undefined)

         {

                 alert("document.getElementById(tdTiannetDay"+i+"is null");

         }

         else

         {

             alert(da.tagName);

                //alert(typeof(da.constructor));

         }

 

查找到一个区别:http://kongjian.baidu.com/freezesoul/blog/item/f6b7e5cd275752510eb34548.html

 

javascrīptdom对象和普通对象可以通过判断tagName属性来区别,但是这不是非常好的办法,因为你很难禁止他人在普通对象中定义tagName属性。另外一个比较好的方法是dom对象的constructor属性一般为undefined(同时,显然地,instanceof Object将返回false,这是它们区别其他对象的一个明显特征

 

 

1.10  execscrīpt

如:window.execscrīpt("c = Asc(c)", "vbscrīpt");

仅仅IE支持

 


TAG: JavaScript java性能监控与调优 FireFox IE6 支持

 

评分:0

我来说两句

Open Toolbar