2012-04-04 100 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毫秒以上的时间内点击或关闭对话框。