执行动态注入的<script>不适用于Firefox(47.0)

时间:2016-06-20 09:12:20

标签: javascript jquery ajax code-injection script-tag

我有一个从表格

&#xA;&#xA;
 &lt; SCRIPT src =“...”type =“text / javascript”的AJAX调用返回的HTML片段“&gt;&lt; / SCRIPT&gt;&#xA;&lt; SCRIPT type =”text / javascript“&gt;&#xA; function showForumGrid()&#xA; {...};&#xA;函数f()&#xA; {...}&#xA;&lt; / SCRIPT&gt;&#xA;&lt; DIV id =“div1”&gt;&#xA; ...&#XA; &lt; IMG id =“dummyBody”src =“...”onload =“showForumGrid()”&gt;&#xA;&lt; / DIV&gt;&#xA;  
&#xA;& #xA;

在AJAX调用处理程序中,我正在执行以下操作

&#xA;&#xA;
  var x = document.getElementById(snippet_container_id);&#xA;&# xA; // $(x).html(ajaxData);&#xA;&#xA; var domFragment = $ .parseHTML($ .trim(ajaxData),document,true);&#xA; $(x)。空();&#XA; $(x)的.prepend(domFragment); &#xA;  
&#xA;&#xA;

这在Chrome中工作正常但在Firefox中我收到错误ReferenceError:showForumGrid未定义

&#xA ;

1 个答案:

答案 0 :(得分:2)

这是因为当您在文档中附加<script>节点时,在解析文档之后,它们不会像以前一样被视为同步。
(甚至设置async attribute不起作用)

这是一个简化的例子:

&#13;
&#13;
var external = document.createElement('script');
var inner = external.cloneNode();
external.src = 'data:application/javascript,console.log("external")';
inner.innerHTML = 'console.log("inner")';

document.head.appendChild(external);
document.head.appendChild(inner);
&#13;
&#13;
&#13;

不确定除了等待外部load的{​​{1}}事件(IE9 + browsers),还是设置循环检查{{1}定义(如果你需要支持旧浏览器)

&#13;
&#13;
<script>
&#13;
&#13;
&#13;