我知道有很多关于如何打败弹出窗口拦截器的线索.在这种情况下,我并不是真的想要这样做.默认情况下,浏览器不会阻止弹出窗口.允许使用合法的用户,例如用户点击它时.这是一个很好的测试: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();用户随后将点击此按钮以启动弹出窗口.这适用于所有浏览器,但我仍然希望让用户更加无缝.
再次感谢, :)
解决方法:
为什么不将验证码移动到onclick事件中?
例:
的onclick = “JavaScript的:validateInput();”
然后,在validateInput()中,如果密码有效,则打开新窗口.
另外,请确保您没有使用jQuery动态分配onclick处理程序.它应该静态指定为HTML属性.