2011-06-03 66 views
0

我有一個JS在生成之前生活</body>標記包含一個方法,該方法注入另一個<script>元素來加載JS文件,如果執行某個操作。IE7追加但不加載<script>當注入時

的代碼段追加看起來是這樣的:

var script = document.createElement('script'); 

script.setAttribute('type', 'text/javascript'); 
script.setAttribute('src', 'http://path/to/script.js'); 

document.body.appendChild(script); 

該代碼工作正常在所有瀏覽器除了IE7。在IE7上,它成功地將腳本附加到DOM中,但不加載它。

另一件我想指出的是,我也嘗試將該腳本追加到<head>,它仍然無法正常工作。

+5

不要使用'setAttribute'設置'DOMElements'的屬性,IE可能會窒息;改用原生屬性。例如,使用'script.type ='text/javascript';'。而且,目前的文檔模式是什麼? – 2011-06-03 18:17:36

+0

定義「所有瀏覽器」(主要包括ie6,8和9?) – Kraz 2011-06-03 18:18:05

+0

所有瀏覽器= IE> 7,FF,Chrome,Safari – 2011-06-03 18:19:41

回答

2

而不是增加您的script元素到body元素,嘗試將腳本添加到head(當你嘗試這樣做,只是之前收盤</body>標籤未閉合)的。此外,不要使用setAttribute,而是直接設置新DOMElement的屬性:

var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = 'http://path/to/script.js'; 
document.getElementsByTagName('head')[0].appendChild(script); 
0

在DOM完成加載後添加腳本?我知道IE6在加載DOM之前修改DOM存在問題(將致命:無法加載此頁面)。

要麼使用window.onload要麼只是將腳本放入包含在標題中的JavaScript文件中。另外,如果JavaScript資源實際上不是JavaScript文件,但是某些生成JavaScript文件的腳本確保您發送的是JavaScript內容標題。

+0

這就是它目前的設置。父腳本放在關閉主體標記之前,它也是一個自我執行的腳本。 – 2011-06-03 21:00:25

+0

@Koes:不,在'body'元素的末尾≠在'window.onload'中:如果'body'元素沒有關閉,你不應該修改它。 – 2011-06-03 21:47:21

0

您是否嘗試過附加script標籤,然後設置源?我知道IE7在追加樣式標籤時需要這個順序,所以它可能值得一試!