Как отключить "запретить этой странице создавать дополнительные диалоги"?

Я разрабатываю веб-приложение, которое использует JavaScript alert() и confirm() диалоговые окна.

Как я могу остановить Chrome от показа этого флажка?

есть ли настройки я могу изменить?

Я знаю, что могу изменить исходный код, но мне бы хотелось, чтобы Chrome все еще мог автоматически обновляться.

мне не нужно беспокоиться о других браузерах, так как приложение работает только в Chrome.

у меня есть доступ администратора к (Windows) машины, которые запускают приложение.

6 ответов


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

вы не можете. Это функция браузера там, чтобы предотвратить сайты от показа сотен предупреждений, чтобы предотвратить вас от ухода.

вы можете, однако, заглянуть в модальные всплывающие окна, такие как 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 будет установите этот флажок. Вот простой пример обходного пути:

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({
    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);
}