我知道有很多關於如何擊敗彈出窗口阻止程序的主題。在這種情況下,我並不是真的想這樣做。默認情況下,瀏覽器不會阻止彈出式窗口。合法的,比如用戶點擊它時,是允許的。這是一個很好的測試: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>
via $('#form-passcode').html();
其中用戶隨後將點擊以啓動彈出窗口。這適用於所有瀏覽器,但我還是很樂意讓用戶更完美的..
再次感謝:)
謝謝。我只是嘗試了你的方法,通過將所有內容移動到onclick函數中,禁用表單和按鈕的所有jquery處理程序。它現在可以在IE8中運行,但彈出窗口仍然在Chrome和Firefox中被屏蔽:(。 – Lyon 2010-07-15 05:55:52
@Lyon:Chrome和FireFox可能只有一層深度,或者只是幾條語句到代碼路徑中。 – 2010-07-15 11:08:26
@Jeroen謝謝:)建議我編輯我的問題以包含代碼.. – Lyon 2010-07-15 14:56:59