我有一段代码可以简化为:
var s='' ;
s += "<"+"script type=\"text/javascript\" src=\"http://somehost.com/scripts/FooFunctions.js\">\n";
s += "<"+"/script>" ;
s += "<"+"script type=\"text/javascript\">\n";
s += "FooFunction(42, 'i love cats');\n";
s += "<"+"/script>" ;
document.write(s) ;
在IE以外的所有浏览器中,这都按照您的预期执行 - somehost.com/scripts/FooFunctions.js中的函数按预期工作。
在Internet Explorer中,此操作失败。
谷歌搜索这似乎很难。我发现偶尔的帖子遇到同样的问题,但没有解决方案。(有一个正当理由,外部文件需要以这种方式包含 来自javascript ,并且pgae不能插入<script src="http://somehost.com/scripts/FooFunctions.js">
在它。)
要清楚,问题是:如何使上述代码在Internet Explorer中的功能与在例如火狐?
答案 0 :(得分:2)
试试这个,它适用于IE
function addJsFile(jsFileLocation){
var script=document.createElement('script');
script.type='text/javascript';
script.src=jsFileLocation;
document.getElementsByTagName("head")[0].appendChild(script);
}
addJsFile("http://code.jquery.com/jquery-latest.pack.js");
setTimeout(function(){alert(jQuery);},1000);
答案 1 :(得分:0)
看起来IE在加载脚本之前正在调用FooFunction
。您可以使用setTimeout("FooFunction(42, 'i love cats')", 1000);
进行测试,假设一秒钟足以加载脚本,此调用将成功。
如果您不能使用像jQuery这样的框架来加载脚本,这将在脚本加载时为您提供回调,您可以使用setInterval
破解自己的脚本,检查{{1 }}
答案 2 :(得分:0)
只要document.write调用完成,它就会在第二个脚本标记中运行该函数。无论外部脚本是否已加载。这应该不只是一个IE问题,但应该影响所有浏览器。您确定它不会影响其他浏览器,因为它们已缓存外部脚本吗?清除缓存并在其他浏览器中重试后会发生什么?
无论如何,在一个理想的世界中,你应该只能在脚本标签上使用.onload,但我99%确定在IE6中的脚本标签上没有触发onload的问题所以我们需要求助于使用onload而是在窗口元素上。在下载所有脚本(包括上述外部js文件)之前,此事件不会触发。