4

我有基于 PHP、HTML 和 javascript 的典型 Web 应用程序。

用户可以从 HTML 页面触发一个 javascript 操作,该操作与服务器进行一些 ajax 交互。这个 javascript 函数碰巧会提示几个警报消息,要求用户确认。

当第二个警报运行时,浏览器(Chrome 版本 18.0.1025.142 m)在警报框中显示一条消息和一个复选框,用户可以在其中“阻止此页面的其他对话框窗口”(这不是我翻译的确切文本它来自我浏览器中的意大利语)。

用户可以告诉浏览器阻止连续的警报,这对我的应用程序不利。

有没有办法提示更多的警报,避免用户阻止它们的功能?

也许我应该使用除警报之外的其他东西,也许是一个 jQuery 组件?如果我这样做,哪一个类似于警报?

4

3 回答 3

5

我强烈建议使用jQuery 的对话框作为替代方案。它实际上并不是物理弹窗,因为它确实是网页上的一个浮动div,所以无法被屏蔽。另一个第二大优势是看起来并不尴尬。

于 2012-04-04T10:53:16.780 回答
4

一些浏览器为此功能提供此功能,alert()否则恶意 Web 开发人员可能会打开无休止的警报并阻止用户离开页面 - 还记得 Rick-rolling 吗?没有办法对此进行编码,也不应该有(如果您可以围绕这个功能进行编码,这将使它变得毫无意义)。

另一种方法是使用 html 来实现将显示在页面其余部分上方的对话框,(通常)使用透明(或半透明)div 覆盖整个页面,以防止与对话框元素以外的任何内容进行交互。jQuery UI 提供了一个对话框控件来执行此操作 - 看看 modal 选项。

于 2012-04-04T11:02:04.023 回答
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 毫秒内单击或关闭对话框。

于 2014-05-15T22:54:39.423 回答