2011-09-23 208 views
1

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上,警報發生在每個頁面加載。有沒有辦法解決這個問題?

回答

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或會話變量。

+0

問題是,'browser-update.org'腳本應該自動執行該操作。我想知道我打電話的方式有什麼不同,現在不這樣做。是因爲'$ buoop'變量在'function()'裏面嗎? – TRiG

+0

所以基本上已經有一個由腳本檢查..它是由頁面加載覆蓋?你在頁面之間導航還是通過ajax加載? – rlemon

+0

頁面之間的正常導航,以下鏈接。 – TRiG

1

當顯示警報時,您可以保存cookie,並在顯示警報之前每次檢查該cookie是否存在。