【发布时间】: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' 远程获取的内容可能是个坏主意。 (我并不是说它导致了这个问题,这通常是不明智的。)
标签: javascript ajax internet-explorer innerhtml script-tag