2010-03-08 73 views
6

我在我的网站上安装了一些跟踪脚本和Web服务,并且我注意到其中一个服务出现故障时,它仍尝试调用托管在另一个服务器上的外部JavaScript文件。在Firefox,Chrome和其他新浏览器中,当其中一项服务关闭时,似乎没有任何问题。但是,在IE7和IE8中,在显示所有内容之前,我的页面不会全部加载并超时。有什么方法可以在这些javascript调用中添加超时以防止它们在停止时打破我的页面?外部Javascript超时

回答

5

你可以用JS页面加载后动态加载它们。如果JS文件位于不同的服务器上,那么浏览器仍然会显示“浏览器繁忙”指示符,但是原始页面会加载。

如果你可以从你自己的站点获取JS,你可以在加载页面后加载XMLHttpRequest(或者使用你最喜欢的JS库的助手,例如jQuery的$.ajax(...)),然后对它进行评估。通过这种方式,抓取本身不会显示浏览器繁忙指示符。

要从您自己的站点获取JS,您可以从您的跟踪提供程序(它不会被官方支持但通常可用)下载它 - 只需记住每隔一段时间重新获取新版本,或者您可以创建您自己的网站上的“转发”服务,从跟踪提供商处获取并在本地缓存一段时间。这样你的JS就不会有过时的危险。

Steve Souders有关于deferred loading of scripts and browser-busy indicators的更多信息。

+0

+1这是一个很好的链接。 – 2010-03-08 20:01:46

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"); 
    ... 
} 
+0

不支持跨所有浏览器:( – orip 2010-03-08 19:46:29

+0

耶我不认为这是行得通的。我认为真正的问题是IE浏览器试图连接到外部的JS文件,默认超时设置得太高firefox和其他浏览器似乎很快知道该文件没有响应,并相应地继续前进,我不知道是否有任何方法来防止...... – mike 2010-03-08 19:49:15

+0

那么你可以使用JavaScript加载外部JavaScript文件,而不是HTML。 '