如何禁用“阻止此页面创建其他对话框”?

时间:2012-07-30 21:23:10

标签: javascript google-chrome

我正在开发一个使用JavaScript alert()confirm()对话框的网络应用。

如何阻止Chrome显示此复选框?

我可以修改设置吗?

我知道我可以修改源代码,但我希望Chrome可以自动更新。

我不需要担心其他浏览器,因为该应用仅在Chrome中运行。

我拥有运行应用程序的(Windows)计算机的管理员权限。

6 个答案:

答案 0 :(得分:42)

你做不到。这是一个浏览器功能,可以防止网站显示数百个警报,以防止您离开。

但是,您可以查看jQuery UI Dialog等模态弹出式窗口。这些是显示自定义对话框的javascript警告框。它们不使用默认的alert()功能,因此可以完全绕过您遇到的问题。

我发现,如果您使用自定义对话框而不是默认警报并确认,那么包含大量消息框和确认的应用会有更好的用户体验。

答案 1 :(得分:9)

这就是我最终要做的事情,因为我们有一个Web应用程序,其中有多个用户不在我们的控制之下...(@ 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毫秒的时间内点击或关闭对话框。

答案 2 :(得分:7)

我知道每个人都在道德上反对这一点,但我知道有理由开始实际开玩笑。我认为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);

答案 3 :(得分:3)

您最好使用jquery-confirm而不是尝试删除该复选框。

$.confirm({
    title: 'Confirm!',
    content: 'Are you sure you want to refund invoice ?',
    confirm: function(){
       //do something 
    },
    cancel: function(){
       //do something
    }
}); 

答案 4 :(得分:-1)

如果他们愿意,你应该让用户这样做(你无论如何也无法阻止他们)。

你的问题是你需要知道他们有,然后假设他们的意思是好的,而不是取消。将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);
}

答案 5 :(得分:-19)

function alertWithoutNotice(message){
    setTimeout(function(){
        alert(message);
    }, 1000);
}