簡體   English   中英

Ajax:將代碼注入Internet Explorer

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM