我的html页面通过Ajax为页面上的动态面板动态加载页面。我需要在动态加载的页面中执行脚本标记。我修改了SO question的代码。它在FF / Safari / Chrome上运行良好。
但是类型脚本的dom节点在IE上的工作方式不同。 - 我似乎无法向IE 7中的脚本节点添加文本:
// variable "data" holds the script element's content from an
// incoming html page loaded via ajax
var script = document.createElement("script");
script.type = "text/javascript";
script.appendChild(document.createTextNode(data)); // doesn't work on ie
// also doesn't work on IE 7:
script.innerHTML = data;
script.innerText = data;
让sw在IE上运行的任何想法? (除了使用eval。)
答案 0 :(得分:2)
您应该简单地致电eval(data)
。
虽然通常应该避免使用eval
,但这是少数例外情况之一。
编辑:没有eval
,you can do it like this:
var scriptNode = document.createElement('script');
scriptNode.type = 'text/javascript';
scriptNode.text = data;
document.head.appendChild(scriptNode);
document.head.removeChild(scriptNode); //Optional
答案 1 :(得分:2)
您可以考虑一些选项(使用eval除外)。
脚本可以从单独的路径提供;设置脚本元素的src
而不是其内容应该可以工作,即使在IE中也是如此。
要执行的脚本可以附加到图像或其他元素的onload
侦听器,可以像处理脚本元素一样附加到文档中。
使用Function而不是eval。这至少会将评估的代码保留在本地范围之外:new Function(data)();