2012-04-04 117 views
1

我有典型的基於php-html-javascript的web應用程序。Chrome塊警報彈出

從一個html頁面中,用戶可以觸發一個與服務器進行一些ajax交互的javascript動作。這個javascript函數恰好提示幾條警報消息要求用戶確認。

重點是當第二個alert()運行瀏覽器(Chrome版本18.0.1025.142 m)在警告框中顯示一條消息和一個複選框,用戶可以在該框中「阻止其他對話框窗口」與我的瀏覽器不一樣,它是意大利語)。

重點是用戶可以告訴瀏覽器阻止連續的alert()。這對我的應用程序不好。

有沒有辦法提示更多的alert()避免用戶阻止它們的功能?

也許我應該使用alert()以外的東西,也許是一個jQuery組件?在哪一個類似於警報?

+2

您的應用程序正在惡化。停下來。 :) – XTL 2012-04-04 10:53:21

+0

:)不這麼認爲。首先,我問一個警告,「你確定要刪除id 34」,然後我做一個ajx請求,如果沒關係,我會顯示另一個警報「id 34正確刪除」。 – 2012-04-04 10:59:01

回答

3

我強烈建議jQuery's dialog作爲替代。它實際上並不是一個物理彈出窗口,因爲它實際上是網頁上的一個浮動div,所以它不能被阻止。另一個很大的優勢是,看起來並不令人尷尬。

2

某些瀏覽器爲alert()函數提供此功能,否則惡意Web開發人員可能會打開無盡的警報並阻止用戶離開頁面 - 請記住Rick-rolling?沒有辦法對此進行編碼,也不應該存在(如果您可以對此功能進行編碼,使其變得毫無意義)。

另一種方法是使用html實現一個會顯示在頁面其餘部分上方的對話框(通常)使用透明(或半透明)div來覆蓋整個頁面,以防止與對話框之間的任何交互元素。 jQuery UI提供了a dialog control這樣做 - 看看模式選項。

0

我想出了一種方法來檢測這些是否被阻止。你將不得不做你自己的事情與你將顯示給用戶的消息。

window.nativeAlert = window.alert; 
window.alert = function (message) { 
var timeBefore = new Date(); 
var confirmBool = nativeAlert(message); 
var timeAfter = new Date(); 
if ((timeAfter - timeBefore) < 350) { 
    MySpecialDialog("You have alerts turned off, turn them back on or die!!!"); 
    } 
} 

window.nativeConfirm = window.confirm; 
window.confirm = function (message) { 
var timeBefore = new Date(); 
var confirmBool = nativeConfirm(message); 
var timeAfter = new Date(); 
if ((timeAfter - timeBefore) < 350) { 
    MySpecialDialog("You have alerts turned off, turn them back on or die!!!"); 
} 
return confirmBool; 
} 

很明顯我已經把時間設置爲3.5毫秒。但經過一些測試後,我們只能在約5毫秒以上的時間內點擊或關閉對話框。