<HTML>
 <HEAD>
 <script>
function fun(np){
var opener = window.open(np);
opener.document.getElementsByTagName('div')[0].style.border="solid 10px red";
return false;
}
 </script>
 </HEAD> <BODY>
  <a href="###" onclick="fun('e.html')">open</a>
 </BODY>
</HTML>这段代码在ie下能正常实现在firefox就不行,可是如果我改成这样就行了<HTML>
 <HEAD>
 <script>
function fun(np){
var opener = window.open(np);
alert(opener);
opener.document.getElementsByTagName('div')[0].style.border="solid 10px red";
return false;
}
 </script>
 </HEAD> <BODY>
  <a href="###" onclick="fun('e.html')">open</a>
 </BODY>
</HTML>这是为什么,我只想实现代码,不想alert弹出,怎么办才能在firefox下实现和ie一样的效果

解决方案 »

  1.   

    ie,firefox下其实一样的,只是随机的问题。打开子页面时,不能保证子页面已经加载完毕,这时如果对未加载的元素操作就会出错。安全的做法是操作时,判断一下操作的对象存不存在,然后再操作,或者,在子页面的onload中,操作。
      

  2.   

    判断子页面DOM是否加载完成
    function waitThenDoIt(){
      try{
        if (window.document.readyState){//IE
          if (window.document.readyState==’complete’){ 
            doIt();
          }else
            setTimeout("waitThenDoIt()",10);
        } else {//Firefox
            window.addEventListener("load",function(){doIt();},false);
        }  
      } catch (ex) { 
      }
    }
    function doIt(){
      //…
    }
      

  3.   

    <HTML>
     <HEAD>
     <script>
    var opener;
        function fun(np){
            opener = window.open(np);
            setTimeout("s()",1000)
            
            return false;
        }
      function s(){
         opener.document.getElementsByTagName('div')[0].style.border="solid 10px red";  } </script>
     </HEAD> <BODY>
      <a href="###" onclick="fun('e.html')">open</a>
     </BODY>
    </HTML>
      

  4.   

    你的子页面尚未加载完成,所以你取不到子页面的DIV
    可以通过document.readyState来监听
     <script type="text/javascript">
        var opener;
        function fun(np){
            opener = window.open(np);
            test();                
            return false;
        }
        function test()    {
                if(opener.document.readyState == "complete")    {
                    opener.document.getElementsByTagName('div')[0].style.border="solid 10px red";    
                    clearTimeout();
                }    else    {
                    setTimeout("test()",1000);
                }
            }
     </script>我没有具体测试过,大概就是这个意思~
      

  5.   

    window.addEventListener("load",function(){doIt();},false);
    应该直接可以
    window.addEventListener("load",doIt,false);