2009-10-16 31 views
1

我無法讓後續代碼在Internet Explorer中工作,它似乎並不想執行通過Ajax從服務器發回的代碼,它只是不做任何事情:Ajax:將代碼注入Internet Explorer中

var ajax = new ActiveXObject('Microsoft.XMLHTTP'); 
ajax.open('GET','http://fromsitewebsite.com/javascript.js',true); 
ajax.setRequestHeader('Connection','close'); 
ajax.onreadystatechange = function() 
{ 
    if (ajax.readyState == 4) 
    { 
    document.body.innerHTML += '<script type="text/javascript">'+ajax.responseText+'</script>'; 
    } 
}; 

ajax.send(''); 

我試過這樣做,仍然沒有運氣;

document.body.innerHTML += '<script type="text/javascript">('+ajax.responseText+')()</script>') 

乾杯

回答

2

一些具體要get IE to handle the content of the script tag properly,你需要設置.text的值。

var scrElem = document.createElement('script'); 
scrElem.type = 'text/javascript'; 
scrElem.text = ajax.responseText; 
document.body.appendChild(scrElem); 
+0

感謝您的解決方案,它按預期工作 – 2009-10-23 07:13:07

0

嘗試eval返回的代碼。

0

您可能需要創建腳本節點,然後通過「innerText」屬性而不是「innerHTML」設置其內容。無論如何,這真是一件奇怪的事情。您可以添加一個腳本元素,並將其「src」屬性設置爲您在AJAX調用中使用的URL。

當你說它「什麼都不做」時,你檢查腳本錯誤嗎?

1

你爲什麼不嘗試:

var scriptElmnt = document.createElement('SCRIPT'); 
scriptElmnt.type = 'text/javascript'; 
scriptElmnt.src = '/javascript.js'; 
document.body.appendChild(scriptElmnt); 

如果我沒有記錯,這將按預期

0

在IE瀏覽器的情況下,你需要使用EXECSCRIPT方法

if (ajax.readyState == 4) 
{ 
    if (window.execScript) 
     window.execScript(ajax.responseText); 
    else 
     document.body.innerHTML += '<script type="text/javascript">'+ajax.responseText+'</ script>'; 
} 

EVAL,這是上述建議,在IE

0

有幾件事。

首先eval()是邪惡的。如果你在一個重要的JavaScript驅動的應用程序中使用它,它會顯着減慢它的速度。

另外,爲什麼要加載JavaScript代碼?一個好主意是想一個其他方法。如果它是一個小型腳本,只需加載它,用戶就可以緩存它,並且加載時間會很舒服。如果它是要添加到頁面的服務器值,請改用AJAX並加載JSON。如果javascript文件很大,請嘗試縮小它並使用gzip從服務器傳送它。如果非上述情況,IE支持腳本上的屬性稱爲defer =「defer」,它將呈現並執行新添加的代碼。但我不會推薦它,因爲它只支持IE。

..fredrik