我有基于PHP,HTML和javascript的典型Web应用程序。
在HTML页面中,用户可以触发与服务器进行某些ajax交互的javascript操作。这个javascript函数恰好提示几条警报消息,要求用户确认。
当第二个警报运行时,浏览器(Chrome版本18.0.1025.142 m)会在警告框中显示一条消息和一个复选框,用户可以在该框中“阻止此页面中的其他对话框窗口”(这不是确切的文本我在浏览器中将其翻译成意大利语。)
用户可以告诉浏览器阻止连续警报,这对我的应用程序不利。
有没有办法提示更多的警报,避免用户阻止它们的功能?
也许我应该使用除警报之外的东西,也许是jQuery组件?如果我这样做,哪一个与警报相似?
答案 0 :(得分:5)
我强烈建议jQuery's dialog作为替代方案。它实际上不是一个物理弹出窗口,因为它实际上是网页上的浮动div,因此无法阻止它。另一个第二大优势是看它并不尴尬。
答案 1 :(得分:4)
某些浏览器为alert()
功能提供此功能,因为否则恶意Web开发人员可能会打开无限警报并阻止用户离开页面 - 请记住Rick-rolling?没有办法对此进行编码,也不存在(如果你可以编写这个功能会使它变得毫无意义)。
替代方法是使用html实现一个对话框,该对话框将显示在页面的其余部分上方,(通常)使用透明(或半透明)div来覆盖整个页面,以防止与除了对话框元素之外的任何内容进行交互。 jQuery UI提供a dialog control来执行此操作 - 查看模态选项。
答案 2 :(得分: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毫秒的时间内点击或关闭对话框。