从 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 支持状态如何?