我正在开发一个利用 JavaScriptalert()
和confirm()
对话框的网络应用程序。
如何阻止 Chrome 显示此复选框?
有可以修改的设置吗?
我知道我可以修改源代码,但我希望 Chrome 仍然可以自动更新。
我不需要担心其他浏览器,因为该应用程序仅在 Chrome 中运行。
我对运行该应用程序的 (Windows) 计算机具有管理员访问权限。
我正在开发一个利用 JavaScriptalert()
和confirm()
对话框的网络应用程序。
如何阻止 Chrome 显示此复选框?
有可以修改的设置吗?
我知道我可以修改源代码,但我希望 Chrome 仍然可以自动更新。
我不需要担心其他浏览器,因为该应用程序仅在 Chrome 中运行。
我对运行该应用程序的 (Windows) 计算机具有管理员访问权限。
你不能。这是一项浏览器功能,可防止网站显示数百条警报以阻止您离开。
但是,您可以查看jQuery UI Dialog之类的模态弹出窗口。这些是显示自定义对话框的 javascript 警报框。他们不使用默认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);
}