如果使用document.write,则无法以编程方式插入js

我试图以编程方式插入js文件,使用jquery和类似的东西:

var script = document.createElement( 'script' ); script.type = 'text/javascript'; script.src = 'http://someurl/test.js'; $('body').append(script); 

它工作正常,如果test.js包含一个alert或一些简单的代码,它工作正常,但如果文件test.js包含document.write ,并且包含js的文件托管在另一个域而不是test.js(或localhost)没有任何反应,萤火虫显示错误:

从异步加载的外部脚本调用document.write()被忽略。

如果test.js和包含它的文件托管在同一个域上,在chrome上它仍然无法工作但是在firefox上document.write执行得很好但是页面永远保持“加载”并且嗅探器显示对所有文件的请求处于“待定”状态。

我可以尝试以编程方式包含js文件的其他方法吗?

使用innerHTML而不是使用document,write

并使用以下代码注册脚本,

 (function() { var jq = document.createElement('script'); jq.type = 'text/javascript'; jq.async = true; jq.src = 'http://someurl/test.js'; var s = document.body.getElementsByTagName('script')[0]; s.parentNode.insertBefore(jq, s); })(); 

Document.write仅适用于加载html时的同步任务(第一次),从不用于您尝试执行的异步任务。

您要做的是将 DOM元素动态插入HEAD元素。 我坐着这个剧本。 举个例子,这是一个竞争条件,但你明白了。 使用URL调用load_js 。 这是为许多现代API完成的,它是您跨域JavaScript的最好朋友。

       

您插入JavaScript的方法没有任何问题。 document.write只是糟透了一点。 它仅用于同步任务,因此将document.write放在单独的脚本文件中会遇到麻烦。 无论如何,人们都这样做。 我经常看到的解决方案是覆盖document.write