从 Internet Explorer 中的 AJAX 响应中删除 SCRIPT 标记

Posted

技术标签:

【中文标题】从 Internet Explorer 中的 AJAX 响应中删除 SCRIPT 标记【英文标题】:SCRIPT tag removed from AJAX response in Internet Explorer 【发布时间】:2012-01-15 20:08:47 【问题描述】:

在我们当前的项目中,一些代码通过 AJAX 返回,我们使用 innerhtml 将此代码放在 DIV 中。

现在我们在这个 DIV 中搜索所有可用的脚本标签,并 EVAL() 这些脚本标签的内容(将一些信息添加到全局数组等)

scriptTags = responseElement.getElementsByTagName("script");

for (i = 0; i < scriptTags.length; i++) 
            eval(scriptTags[i].text);
        

这在 Firefox 和 Chrome 中完美运行。但在 IE 中 scriptTags 似乎是空的。经过进一步调查,似乎 responseElement 的 innerHTML 不包含任何 SCRIPT 标签(而在 Firefox / Chrome 中它们就在那里!)

有人知道原因和/或解决方法吗?

顺便说一句,这就是我在页面上放置 AJAX 响应的方式:

this.proxy.innerHTML = o.responseText;
scriptTags = this.proxy.getElementsByTagName("script");

调试 o.responseText 会在响应中显示 SCRIPT 标记。导航到页面上的 this.proxy 元素会在 IE 中显示 no SCRIPT 标签,但在 Firefox / Chrome 中会显示。

【问题讨论】:

目前仅在 IE8 中进行测试 - 发生此行为/问题的地方。所以假设它也是 IE7 中的一个问题。 IE9应该玩的不错,我希望。但目前只在 Ubuntu 上工作,因此没有可用于 IE 的真正测试环境。 查看article M$ 的documentation 关于innerHTML 表示您必须将“DEFER”属性添加到您的脚本中。还要检查这个其他article。 我也找到了这些,但并没有真正解决我们的问题。但是我遇到了另一个来源:allofetechnical.wordpress.com/2010/05/21/…,似乎那里提供的解决方案和原因适用于我们的情况。我们的第一个子节点是脚本标签。突然渲染它前面的东西使它在 IE 中正常工作。 'eval' 远程获取的内容可能是个坏主意。 (我并不是说它导致了这个问题,这通常是不明智的。) 【参考方案1】:

问题已通过在 de AJAX 响应中的 SCRIPT 标记之前添加一个额外的节点元素得到解决。 (解决方案/原因:http://allofetechnical.wordpress.com/2010/05/21/ies-innerhtml-method-with-script-and-style-tags/)

将来我们应该更改我们的应用程序,以便将 HTML 作为 JSON 发送回。

【讨论】:

+1 我也遇到了这个问题,我现在用这种方法检查一下:) 非常感谢这篇文章的链接,对我来说,'defer' 属性有效。

以上是关于从 Internet Explorer 中的 AJAX 响应中删除 SCRIPT 标记的主要内容,如果未能解决你的问题,请参考以下文章

从 Internet Explorer 中的 AJAX 响应中删除 SCRIPT 标记

如何从 Internet Explorer 11 降级到 Internet Explorer 10?

Internet Explorer 中的 TTF 支持状态如何?

Internet Explorer TextRange 中的字符偏移

Internet Explorer 中的图像加载超时

如何从批处理文件中打开和关闭 Internet Explorer?