我在我的网站上安装了一些跟踪脚本和Web服务,并且我注意到其中一个服务出现故障时,它仍尝试调用托管在另一个服务器上的外部JavaScript文件。在Firefox,Chrome和其他新浏览器中,当其中一项服务关闭时,似乎没有任何问题。但是,在IE7和IE8中,在显示所有内容之前,我的页面不会全部加载并超时。有什么方法可以在这些javascript调用中添加超时以防止它们在停止时打破我的页面?外部Javascript超时
6
A
回答
5
你可以用JS页面加载后动态加载它们。如果JS文件位于不同的服务器上,那么浏览器仍然会显示“浏览器繁忙”指示符,但是原始页面会加载。
如果你可以从你自己的站点获取JS,你可以在加载页面后加载XMLHttpRequest
(或者使用你最喜欢的JS库的助手,例如jQuery的$.ajax(...)
),然后对它进行评估。通过这种方式,抓取本身不会显示浏览器繁忙指示符。
要从您自己的站点获取JS,您可以从您的跟踪提供程序(它不会被官方支持但通常可用)下载它 - 只需记住每隔一段时间重新获取新版本,或者您可以创建您自己的网站上的“转发”服务,从跟踪提供商处获取并在本地缓存一段时间。这样你的JS就不会有过时的危险。
Steve Souders有关于deferred loading of scripts and browser-busy indicators的更多信息。
2
尝试增加defer="defer"
defer属性给出了一个提示 脚本不 创建任何内容,这样浏览器就可以 可选推迟解释 脚本的浏览器。这可以通过延迟执行脚本来提高性能 ,直到主体内容被解析后 ,并且 呈现。
编辑
这将防止这些脚本的运行,直到页面加载:
function loadjs(filename) {
var fileref=document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", filename);
}
window.onLoad = function() {
loadJs("http://path.to.js");
loadJs("http://path.to2.js");
...
}
+1这是一个很好的链接。 – 2010-03-08 20:01:46