2011-06-30 45 views
2

我有一個document.write的問題。現在,我有一個頁面來動態加載腳本。所以,我用document.createElement來創建一個<script>。在javascript文件中,我使用document.write來創建一個domiframe元素。但它不適用於每個瀏覽器。爲什麼不?Javascript:在createElement腳本中運行「document.write」失敗

代碼在主頁:

var script = document.createElement('script'); 
script.setAttribute('src', 'http://yoururl/test.js'); 
document.getElementsByTagName('head')[0].appendChild(script); 

代碼腳本test.js:

(function(){document.write('hello');})(); 
+0

什麼是「劑量不工作」是什麼意思?它如何失敗?它是否會讓你的電腦崩潰,或者沒有任何東西被寫入,或者某些東西被寫入了50%的時間,還是寫入了IE6而不是IE 5.5 Mac,或者......?更多的描述在這裏會非常有幫助。 – Domenic

+0

[document.write](http://www.w3。HTML5規範草案中涵蓋了org/TR/html5/apis-in-html-documents.html#document.write)。文檔加載完成後不應使用它。也沒有必要把它包裝在立即執行的表達式中(這樣做不是有害的,只是沒有意義)。 – RobG

回答

4

運行網頁加載完成將創建一個新頁面,並覆蓋所有的後任何文件撰寫聲明當前頁面的內容。這幾乎不是你打算髮生的事情。

http://javascript.about.com/library/blwrite.htm

如果你想創建一個DOM元素,做這種方式,並追加到文檔(或要素):

var elem = document.createElement('iframe'); 
elem.src = "http://www.google.com"; 
document.getElementById('myContainer').appendChild(elem); 

https://developer.mozilla.org/en/DOM/document.createElement

+0

Thx爲您提供幫助,但我的問題在頁面加載後不會發生。在window.onload之前,document.write不起作用。但是,謝謝你們。 – Zodiac

2

您要添加的新腳本元素頭部。內容不顯示,所以即使document.write調用成功,您將看不到文本。

如果你想要顯示的內容,你必須將它添加到身體(作爲子女或後裔),所以移動腳本機體:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<title>Document.write test</title> 
<body> 
    <div> 
    <script type="text/javascript"> 
     var script = document.createElement('script'); 
     script.src = 'http://yoururl/test.js'; 
     document.getElementsByTagName('div')[0].appendChild(script); 
    </script> 
    </div> 
    ... 
</body> 

請注意,您還必須有一個document.write完成後的有效文件。

以上在Firefox 5不起作用,但在IE 6不會注意警告在HTML5規範有關document.write

這種方法具有非常特殊行爲。在某些情況下,此方法可能會影響HTML分析器的狀態,同時分析器正在運行 ,導致DOM 不對應於 文檔的來源。在其他情況下,呼叫可以首先清除當前頁面,就好像 document.open()已被調用。在 還有更多的情況下,該方法簡單地被 忽略,或者拋出異常。對於 更糟的是,這種方法的確切行爲 在某些情況下可能是 ,這取決於網絡延遲,這可能會導致很難調試的故障。由於所有這些原因, 使用這種方法是強烈 勸阻。**

相關問題