動態創建iframe—IE與其他瀏覽器的不同

 

 很多情況下,我們都要動態創建元素,比如動態創建iframe,iframe很特殊,它即可以看作是頁面元素,也可以看作是窗體對象。所以,所對應的取法也不同。比如當作是頁面元素的時候,這樣取:document.getElementById('iframe_id'),當作是窗體對象的時候取法就多了,主要有三種:1、window.frames[index]    2、window.frames['iframe_id']    3、window.frames.iframe_id  

這三種取法在IE裏都一樣,都能正確得到iframe對象,Opera也能正常取出,但惟獨FireFox卻不好使,不管你用哪種取法總是取不出!開始自己也一直想不通錯在了那裏,想可能是FireFox瀏覽器本身的一個Bug,但通過這次項目終於真相大白!

    項目要實現這樣一個功能,動態創建一個form表單來跨域提交數據,並將form表單的target設置成動態創建的iframe(頁面不會跳轉到提交的頁面)。即:MyForm.target="iframe_name"。那麼在創建iframe的時候就要給它賦name屬性。問題就出現了,代碼如下

<script language="javascript" defer="defer">
      var IframeObj = document.createElement("iframe");
       IframeObj.id= "myfrm";
       IframeObj.width =0;
      IframeObj.height =0;
       IframeObj.frameborder = 0;
      IframeObj.src="about:blank";
       IframeObj.name = "myfrm";
       document.body.appendChild(IframeObj);
</script>

這段代碼在FireFox和Opera下都很正常,但在IE下卻賦不了name屬性!!!

於是我想可能是因爲這樣寫是把它當作了一個頁面元素,所以賦不了,那麼就它作爲一個window對象,然後再賦name屬性。代碼如下:

<script language="javascript" defer="defer">
      var IframeObj = document.createElement("iframe");
       IframeObj.id= "myfrm";
       IframeObj.width =0;
      IframeObj.height =0;
       IframeObj.frameborder = 0;
      IframeObj.src="about:blank";      
       document.body.appendChild(IframeObj);

       window.frames.myfrm.name = "myfrm";
</script>

     這樣寫IE是正常了,可FireFox確又不幹了!!!錯誤提示是window.frames.myfrm沒有這個屬性???無奈之下只好這麼寫:

<script language="javascript" defer="defer">
      var IframeObj = document.createElement("iframe");
       IframeObj.id= "myfrm";
       IframeObj.width =0;
      IframeObj.height =0;
       IframeObj.frameborder = 0;
      IframeObj.src="about:blank";

       frameObj.name = "myfrm";
       document.body.appendChild(IframeObj);

       window.frames.myfrm.name = "myfrm";
</script>

這樣寫就一切正常了,於是我得出了這個結論:在FireFox下,取窗體對象是window.frames.frame_name,而不是windwo.frames.frame_id,在沒寫frameObj.name = "myfrm";這句代碼的時候報沒有window.frames.myfrm沒有這個屬性錯誤就是這個原因。既然window.frames.frame_name可以,那麼window.frames[frame_name]和window.frames[index]當然也是可以的!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章