2009-10-16 75 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