Я знаю, что есть много тем о том, как победить блокировщики всплывающих окон. В этом случае я не пытаюсь это сделать. По умолчанию браузеры не блокируют все всплывающие окна. Допустимые, например, когда пользователи нажимают на него, разрешены. Это хороший тест: http://www.popuptest.com/goodpopups.html (работает в IE, Firefox, Chrome, Opera)
То, как на вышеуказанном тестовом сайте разрешены легитимные всплывающие окна, напрямую связывает событие onclick с запуском нового окна.
В моем случае я не могу просто запустить всплывающее окно. Мне нужно проверить правильность введенного пользователем буквенно-цифрового пароля. Я сделал так, чтобы вход проверялся через ajax, и, если он действителен, будет вызываться window.open()
для запуска окна. Увы, все блокировщики всплывающих окон блокируют это.
Есть ли другой способ сделать это? Я не хочу запускать окно, если ввод неверен. Если ввод недействителен, сообщение об ошибке отображается на странице непосредственно, а не в новом всплывающем окне. Глупо запускать окно, просто чтобы сказать пользователю, что оно недействительно.
Есть какие-нибудь мысли или предложения, как я могу проверить ввод, а также разрешить показ допустимого всплывающего окна?
Спасибо.
Отредактировано, чтобы включить мой (упрощенный) код
HTML-форма:
<form id="form-passcode">
<input id="input-passcode" type="text" name="input-passcode" /><a class="submit" onclick="javascript:passcode_check(); return false;" href="javascript:">Go</a>
</form>
Javascript (с использованием jQuery):
function passcode_check() {
var refPasscode = $('#input-passcode');
var data = $('#form-passcode').serialize();
$.ajax({
url: check_passcode.php',
data: data,
dataType: 'json',
type: 'post',
success: function (j) {
if (j.status == 1) {
newwindow = window.open('http://google.com','Google','menubar=no,height=500,width=300,resizable=no,toolbar=no,location=no,status=no');
if (window.focus) {newwindow.focus()}
}
else {
// show error to end-user
}
}
});
}
}
Я также экспериментировал с менее идеальной альтернативой, в которой при проверке через ajax правильности введенных данных я вставлю ссылку, например, <a href="http://google.com" onclick="newwin(this.href);return false" onfocus="this.blur()">Launch</a>
через $('#form-passcode').html();
, в котором пользователь впоследствии щелкнет, чтобы запустить всплывающее окно. Это работает во всех браузерах, хотя я все равно хотел бы сделать его более удобным для пользователя ..
Еще раз спасибо, :) 1032 *