这不是我的代码,我只是在解决问题。一些已经运行了一年多的代码现在已经停止在 Chrome (12.0.742.122) 中运行,但在其他“大型”浏览器(包括 WebKit 同胞 Safari (5.0.5))中运行。 “不再工作”是指虽然脚本文件确实加载了,但它不会执行。将脚本加载到 innerHTML 或将其写入 div 时您期望的行为类型,但两者都没有完成。下面被注释掉的行都是让它工作的失败尝试,其中第一个是直到最近才有效的原始代码。
<div id="abc"></div>
<script type="text/javascript">
var d=document.getElementById("abc");
var s=document.createElement('SCRIPT');
if(s){s.src=script_path;}
//if(d)d.appendChild(s); //original line that still works in all other browsers
//if(d)d.parentNode.appendChild(s);
//if(d)d.parentNode.insertBefore(s,d);
//if(d)d.parentNode.insertBefore(s,d.nextSibling);
document.body.appendChild(s); //this works, script executes
</script>
上面这段代码的目的是脚本是 div 的子元素。大概他们希望能够删除那个 child 并同时删除所有脚本(我不确定他们的动机)。
最佳答案
我发现了问题所在,这在很大程度上要感谢 Martin Bieder 的来回介绍,并用他的工作示例向我介绍了 jsfiddle.net。
问题实际上是测试页,您认为他们在创建测试页时犯了一个相当无害的错误。 div 和所有代码将在下面简单地表示为######,因为它甚至与问题无关。这实际上是一个 HTML 问题。如果您没有正确匹配结束标签,Chrome 12 会不高兴。我真的不敢相信它会对脚本文件的执行产生影响,但确实如此。在过去的 10 分钟里,我尝试了很多次 HTML 标签的正确与错误,令人难以置信的是这确实是问题所在。
<font><center><b>
##########
</b></font></center>
您会看到字体和中心结束标签的错误方式,这足以让 Chrome 感到困惑,以至于它不会执行添加到这些标签中的任何动态脚本。离奇。我无法在 jsfiddle 上重新创建它,这可能是由于网站的性质运行您放入其中的 html/js(例如使用 onload)。
关于javascript - Chrome 浏览器是否破坏了动态脚本加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761190/