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

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

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

Можно ли изменить параметр?

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

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

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

Ответ 1

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

Ответ 2

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

Вы можете, однако, посмотреть в модальные всплывающие окна, например jQuery UI Dialog. Это javascript-предупреждения, которые показывают пользовательский диалог. Они не используют функцию по умолчанию alert() и, следовательно, полностью обходят проблему, в которой вы работаете.

Я обнаружил, что приложения с большим количеством ящиков сообщений и подтверждений имеют более сильный лучший пользовательский интерфейс, если вы используете настраиваемые диалоги вместо предупреждений по умолчанию и подтверждаете.

Ответ 3

Это то, что я закончил, так как у нас есть веб-приложение, в котором есть несколько пользователей, которые не под нашим контролем... (@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 alerts turned off");
    }
    return confirmBool;
}

Очевидно, я установил время до 3,5 миллисекунд. Но после некоторого тестирования мы смогли только щелкнуть или закрыть диалоги примерно за 5 миллисекунд плюс.

Ответ 4

Я знаю, что все этически против этого, но я понимаю, что есть причины практического шутя, где это желательно. Я думаю, что 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);

Ответ 5

Вам лучше использовать jquery-confirm, а не пытаться удалить этот флажок.

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

Ответ 6

Вы должны позволить пользователю сделать это, если они захотят (и вы все равно не можете их остановить).

Ваша проблема в том, что вам нужно знать, что они есть, а затем предположить, что они означают "ОК", а не отменять. Замените 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);
}