[英]Ajax: injecting code into Internet Explorer
我無法在Internet Explorer中使以下代碼正常工作,它似乎不想執行通過Ajax從服務器發回的代碼,它什么都不做:
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>')
干杯
為了使IE能夠正確處理腳本標簽的內容 ,您需要設置.text值。
var scrElem = document.createElement('script');
scrElem.type = 'text/javascript';
scrElem.text = ajax.responseText;
document.body.appendChild(scrElem);
您為什么不嘗試:
var scriptElmnt = document.createElement('SCRIPT');
scriptElmnt.type = 'text/javascript';
scriptElmnt.src = '/javascript.js';
document.body.appendChild(scriptElmnt);
如果我沒記錯的話,這可以正常工作
嘗試eval
返回的代碼。
您可能必須創建腳本節點,然后通過“ innerText”屬性而不是“ innerHTML”設置其內容。 無論如何,這是一件奇怪的事情。 您可以只添加一個腳本元素並將其“ src”屬性設置為您在AJAX調用中使用的URL。
當您說“什么也沒做”時,您是否檢查過腳本錯誤?
如果是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中有一些特定的
一些東西。
首先,eval()是邪惡的。 如果在繁重的javascript驅動的應用程序中使用它,它將大大降低其速度。
另外,為什么要加載JavaScript代碼? 一個好主意是考慮另一種方法。 如果只是一個小的腳本而已加載,則用戶將對其進行緩存,並且加載時間會很舒適。 如果您要添加到頁面的服務器值,請使用AJAX並加載JSON。 如果javascript文件很大,請嘗試將其縮小,然后使用gzip從服務器傳送。 如果不滿足上述條件,則IE在腳本上支持名為defer =“ defer”的屬性,它將呈現並執行您新添加的代碼。 但是我不推薦它,因為它僅受IE支持。
..fredrik
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.