Ajax:将代码注入Internet Explorer

时间:2009-10-16 12:08:24

标签: javascript html ajax internet-explorer eval

我无法让以下代码在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>')

干杯

6 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

你为什么不试试:

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

如果我没记错的话,这可以按预期工作

答案 2 :(得分:0)

尝试eval返回的代码。

答案 3 :(得分:0)

您可能必须创建脚本节点,然后通过“innerText”属性而不是“innerHTML”设置其内容。无论如何,这是一种奇怪的事情。您只需添加一个脚本元素并将其“src”属性设置为您在AJAX调用中使用的URL。

当你说它“什么都不做”时,你检查过脚本错误吗?

答案 4 :(得分: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中有一些特定的

答案 5 :(得分:0)

一些事情。

首先,eval()是邪恶的。如果你在一个繁重的javascript驱动的应用程序中使用它,它将显着减慢它。

另外,为什么要加载javascript代码?一个好主意是想到另一种方法。如果它是一个小脚本只是加载它,用户将缓存它,加载时间将是舒适的。如果要添加到页面的服务器值使用AJAX并加载JSON。如果javascript文件很大,请尝试缩小它并使用gzip从服务器传送它。如果不是上述内容,IE支持名为defer =“defer”的脚本属性,它将呈现并执行新添加的代码。但我不推荐它,因为它只受IE支持。

..弗雷德里克