浏览器更新脚本

时间:2011-09-23 14:00:15

标签: javascript

Browser-Update.org提供了一个很好的javascript,可以提醒过时浏览器的用户更新它们。不幸的是(a)IE7未包含在默认的过时浏览器列表中,并且(b)该脚本无法通过SSL工作。

他们建议的脚本是

<script type="text/javascript"> 
var $buoop = {} 
$buoop.ol = window.onload; 
window.onload=function(){ 
 try {if ($buoop.ol) $buoop.ol();}catch (e) {} 
 var e = document.createElement("script"); 
 e.setAttribute("type", "text/javascript"); 
 e.setAttribute("src", "http://browser-update.org/update.js"); 
 document.body.appendChild(e); 
} 
</script> 

相反,我正在使用外部JavaScript,如下所示:

app.onload(function() {
    if ('https:' === document.location.protocol) return; // Browser Update script is not currently available over SSL.
    var $buoop = {vs:{i:7,f:2,o:10.5,s:2,n:9}};
    var e = document.createElement('script');
    e.setAttribute('type', 'text/javascript');
    e.setAttribute('src', 'http://browser-update.org/update.js');
    document.body.appendChild(e);
});

要明确:app.onload()是一个很好的函数,可以为window.onload处理程序添加函数。

这似乎有效,但有一个不幸的副作用。如果警报被取消,则不应再在该浏览会话中显示。使用上面的脚本,这似乎不起作用。在IE7上,警报发生在每个页面加载上。有办法吗?

2 个答案:

答案 0 :(得分:1)

var _shown = false;
app.onload(function() {
if(!_shown) {
    if ('https:' === document.location.protocol) return; // Browser Update script is not currently available over SSL.
    var $buoop = {vs:{i:7,f:2,o:10.5,s:2,n:9}};
    var e = document.createElement('script');
    e.setAttribute('type', 'text/javascript');
    e.setAttribute('src', 'http://browser-update.org/update.js');
    document.body.appendChild(e);
  _shown = true;
}
});

如果页面在导航之间重新加载,则将其存储在cookie中或作为会话变量。

答案 1 :(得分:1)

您可以在显示提醒时保存Cookie,并在显示提醒之前每次检查该Cookie是否存在。