我需要加载由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调用。
答案 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非常挑剔;如果两个脚本标签有不同的类型,它会将它们视为甚至不在同一页面上。