跨浏览器替代eval

时间:2010-07-14 19:53:53

标签: javascript eval

我的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。)

2 个答案:

答案 0 :(得分:2)

您应该简单地致电eval(data)

虽然通常应该避免使用eval,但这是少数例外情况之一。


编辑:没有evalyou 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侦听器,可以像处理脚本元素一样附加到文档中。

    < / LI>
  • 使用Function而不是eval。这至少会将评估的代码保留在本地范围之外:new Function(data)();