通过JavaScript将外部JavaScript文件添加到DOM中

时间:2009-10-12 15:42:53

标签: javascript

我需要加载由PHP脚本生成的外部JavaScript文件,我也想将任何查询字符串参数传递给脚本,我想出了以下解决方案:


<script>
var url = 'http://example.com/scripts/js.php?foo=bar';
url += location.search.replace(’?',’&’);

var s = document.createElement(’script’);
s.setAttribute(’type’,'text/javascript’);
s.setAttribute(’src’, url);

// get the script’s ‘outer html’ and add it to the document.
var t = document.createElement(’div’);
t.appendChild(s);
document.write(t.innerHTML);

</script>

这适用于IE以外的所有浏览器(转到图),我相信问题是生成的脚本还会下载更多JS,这似乎挂起......有没有更好的方法来做这样的事情?

更新 如果我按Ctrl + F5加载页面,一切正常......这是为什么? http://example.com/scripts/js.php上的脚本是一堆document.write调用。

4 个答案:

答案 0 :(得分:2)

您可以使用jQuery method。 它易于使用且易于维护。

jQuery适用于:IE 6.0 +,FF 2 +,Safari 3.0 +,Opera 9.0 +,Chrome

jQuery.getScript( url, [callback] ) 
  

使用HTTP GET请求加载并执行本地JavaScript文件。   在jQuery 1.2之前,getScript只能从与原始页面相同的域加载脚本。从1.2开始,您现在可以从任何域加载JavaScript文件。警告:在Safari版本2及更早版本中,无法同步评估全局上下文中的脚本。如果你通过getScript加载函数,请确保在延迟后调用它们。

示例:

$.getScript("test.js", function(){
  alert("Script loaded and executed.");
});

答案 1 :(得分:1)

谷歌的方式:

<script type="text/javascript">
    document.write(unescape("%3Cscript src='file.js' type='text/javascript'%3E%3C/script%3E"));
</script>

您可以使用div.innerHTML来附加此字符串,而不是document.write。

答案 2 :(得分:0)

为什么不直接将创建的脚本标记附加到头部或身体上?

答案 3 :(得分:0)

它在IE中不起作用的原因可能是因为您没有在其他脚本标记中设置type属性。 IE非常挑剔;如果两个脚本标签有不同的类型,它会将它们视为甚至不在同一页面上。