Chrome阻止警报弹出窗口

4
我有一个典型的基于PHP、HTML和javascript的Web应用程序。从一个HTML页面,用户可以触发一个javascript操作,与服务器进行一些ajax交互。这个javascript函数恰好提示几个警报消息以要求用户确认。当第二个警报运行时,浏览器(Chrome版本18.0.1025.142 m)在警报框中显示一条消息和一个复选框,用户可以“阻止此页上的其他对话框窗口”(这不是我的浏览器中的精确文本翻译)。用户可能告诉浏览器阻止后续警报,这对我的应用程序不利。是否有一种方式可以提示更多的警报,避免用户屏蔽它们?也许我应该使用alert以外的其他东西,比如一个jQuery组件?如果我这样做,哪一个与alert类似?

1
:) 不这么认为。首先,我会用一个弹窗询问:“您确认要删除ID为34的内容吗?”然后我会进行AJAX请求,如果一切顺利,那么我将再次使用另一个弹窗提示“ID 34已成功删除”。 - ab_dev86
3个回答

5
我强烈建议使用jQuery的对话框作为替代方案。它实际上不是一个物理弹出窗口,因为它实际上是网页上的浮动div,所以它不能被阻止。另一个很大的优点是它看起来不尴尬。

4
一些浏览器为 alert() 函数提供了这个特性,因为否则恶意的网页开发者可能会打开无数弹窗并阻止用户离开页面——还记得 Rick-rolling 吗?没有办法绕过这个问题,也不应该(如果你可以绕过这个特性编程,那这个特性就有点无意义了)。
另一个选择是使用HTML实现对话框,在整个页面上方显示(通常)使用透明(或半透明)div来覆盖整个页面,以防止与除对话框元素之外的任何内容进行交互。jQuery UI 提供了一个对话框控件来完成这个功能,可以查看模态选项。

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毫秒左右点击或关闭对话框。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接