代码之家  ›  专栏  ›  技术社区  ›  Larry K

Eval的跨浏览器替代方案

  •  0
  • Larry K  · 技术社区  · 15 年前

    我的HTML页面通过Ajax动态加载页面,用于页面上的动态面板。我需要执行动态加载页面中的脚本标记。我从一个 SO question . 它在FF/Safari/Chrome上工作正常。

    但是类型为script的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;
    

    想让软件在IE上工作吗?(不使用Eval。)

    2 回复  |  直到 15 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    你应该打个简单的电话 eval(data) .

    尽管这是真的 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
    
        2
  •  2
  •   Dagg Nabbit    15 年前

    你有几个选择我可以想到(除了使用eval)。

    • 脚本可以从单独的路径提供;设置 src 脚本元素而不是其内容应该可以工作,即使在IE中也是如此。

    • 要执行的脚本可以附加到 onload 图像或其他元素的侦听器,可以像处理脚本元素一样附加到文档中。

    • 使用函数而不是eval。这至少会使计算的代码不在本地范围内: new Function(data)();