【发布时间】:2012-07-28 14:42:46
【问题描述】:
我正在开发一个使用 JavaScript alert() 和 confirm() 对话框的网络应用程序。
如何阻止 Chrome 显示此复选框?
有可以修改的设置吗?
我知道我可以修改源代码,但我希望 Chrome 仍然可以自动更新。
我不需要担心其他浏览器,因为该应用只在 Chrome 中运行。
我对运行应用程序的 (Windows) 计算机具有管理员访问权限。
【问题讨论】:
我正在开发一个使用 JavaScript alert() 和 confirm() 对话框的网络应用程序。
如何阻止 Chrome 显示此复选框?
有可以修改的设置吗?
我知道我可以修改源代码,但我希望 Chrome 仍然可以自动更新。
我不需要担心其他浏览器,因为该应用只在 Chrome 中运行。
我对运行应用程序的 (Windows) 计算机具有管理员访问权限。
【问题讨论】:
你不能。这是一项浏览器功能,可防止网站显示数百条阻止您离开的警报。
但是,您可以查看 jQuery UI Dialog 之类的模态弹出窗口。这些是显示自定义对话框的 javascript 警报框。他们不使用默认的alert() 函数,因此完全绕过了您遇到的问题。
我发现,如果您使用自定义对话框而不是默认的警报和确认,则具有大量消息框和确认的应用会有大大更好的用户体验。
【讨论】:
alert() 和 confirm() 框。我不想重新发明轮子,只是为了禁用该复选框。
alert() 的所有调用都将使用您的自定义模式弹出窗口而不是本机。 stackoverflow.com/questions/1729501/javascript-overriding-alert
这就是我最终要做的,因为我们有一个网络应用程序,其中有多个不受我们控制的用户......(@DannyBeckett 我知道这不是你问题的确切答案,但是那些正在查看您的问题可能会有所帮助。)您至少可以检测他们是否没有看到对话框。您最可能希望更改的内容很少,例如显示时间或实际显示的内容。请记住,这只会通知用户他们已成功点击了那个小复选框。
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");
}
}
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 confirms turned off");
}
return confirmBool;
}
显然我已将时间设置为 3.5 毫秒。但经过一些测试后,我们只能在大约 5 毫秒内单击或关闭对话框。
【讨论】:
我知道每个人都在道德上反对这一点,但我知道在需要这样做的地方有实际开玩笑的原因。我认为 Chrome 对此采取了坚定的立场,在警报消息之间强制执行一秒钟的间隔时间。如果访问者被困在烦人的恶作剧网站上,这可以让访问者有足够的时间关闭页面或刷新。
所以要回答你的问题,一切都是时间问题。如果您每秒发出多次警报,Chrome 将创建该复选框。下面是一个解决方法的简单示例:
var countdown = 99;
function annoy(){
if(countdown>0){
alert(countdown+" bottles of beer on the wall, "+countdown+" bottles of beer! Take one down, pass it around, "+(countdown-1)+" bottles of beer on the wall!");
countdown--;
// Time must always be 1000 milliseconds, 999 or less causes the checkbox to appear
setTimeout(function(){
annoy();
}, 1000);
}
}
// Don't alert right away or Chrome will catch you
setTimeout(function(){
annoy();
}, 1000);
【讨论】:
您最好使用jquery-confirm,而不是尝试删除该复选框。
$.confirm({
title: 'Confirm!',
content: 'Are you sure you want to refund invoice ?',
confirm: function(){
//do something
},
cancel: function(){
//do something
}
});
【讨论】:
如果用户愿意,您应该让他们这样做(无论如何您都无法阻止他们)。
你的问题是你需要知道他们有,然后假设他们的意思是好的,而不是取消。将confirm(x) 替换为myConfirm(x):
function myConfirm(message) {
var start = Number(new Date());
var result = confirm(message);
var end = Number(new Date());
return (end<(start+10)||result==true);
}
【讨论】:
function alertWithoutNotice(message){
setTimeout(function(){
alert(message);
}, 1000);
}
【讨论】:
1000) 玩游戏,您可以让 Chrome 停止显示该复选框。