从外部javascript调用函数时IE失败了吗?

时间:2009-03-03 20:53:53

标签: javascript internet-explorer

我有一段代码可以简化为:

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中的功能与在例如火狐?

3 个答案:

答案 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文件)之前,此事件不会触发。