2012-04-04 3 views
1

У меня есть типичное веб-приложение на основе php-html-javascript.Chrome блокирует всплывающее окно

С html-страницы пользователи могут запускать javascript-действие, которое выполняет какое-то взаимодействие ajax с сервером. Эта функция javascript вызывает запрос нескольких предупреждающих сообщений, требующих подтверждения пользователя.

Дело в том, когда второе предупреждение() запускает браузер (версия Chrome 18.0.1025.142 m), отображает в поле предупреждения сообщение и флажок, где пользователь может «блокировать другие диалоговые окна с этой страницы» (текст не является точным, так как на моем браузере он находится на итальянском языке).

точка может указать браузеру блокировать последовательное оповещение(). И это плохо для моего приложения.

Есть ли способ вызвать несколько предупреждений(), чтобы избежать возможности блокировки пользователей?

Может быть, я должен использовать что-то еще, чем alert(), может быть, компонент jquery? в случае, если он похож на предупреждение?

+2

Ваше применение является злым. Прекрати это. :) – XTL

+0

:) Не думаю. Сначала я спрашиваю с предупреждением: «вы уверены, что хотите удалить id 34», тогда я делаю запрос ajx, и если это нормально, я показываю с другим предупреждением «id 34 правильно удален». –

ответ

3

В качестве альтернативы я бы посоветовал jQuery's dialog. Это не физическое всплывающее окно, потому что это действительно плавающий div на веб-странице, поэтому он не может быть заблокирован. Еще одно второе преимущество заключается в том, что на это не стыдно смотреть.

2

Некоторые браузеры предоставляют эту функцию для функции alert(), потому что в противном случае вредоносный веб-разработчик может открывать бесконечные предупреждения и помешать пользователю покинуть страницу - помните Rick-roll? Нет никакого способа кодировать вокруг этого, и не должно быть (если бы вы могли кодировать эту функцию, что сделало бы ее бессмысленной).

Альтернативой является использование html для реализации диалога, который будет отображаться над остальной частью страницы (обычно) с использованием прозрачного (или полупрозрачного) div для охвата всей страницы, чтобы предотвратить взаимодействие с чем угодно, кроме диалога элементы. Пользовательский интерфейс jQuery предоставляет a dialog control, который делает это - взгляните на вариант модальности.

0

У меня есть способ определить, заблокированы ли они. Вам нужно будет сделать свое дело с сообщением, которое вы будете отсылать пользователю.

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, turn them back on or die!!!"); 
    } 
} 

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, turn them back on or die!!!"); 
} 
return confirmBool; 
} 

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

Смежные вопросы