繁体   English   中英

在用户点击时启动合法的弹出窗口

[英]Launching a legitimate pop-up window on user click

我知道有很多关于如何打败弹出窗口拦截器的线索。 在这种情况下,我并不是真的想要这样做。 默认情况下,浏览器不会阻止弹出窗口。 允许使用合法的用户,例如用户点击它时。 这是一个很好的测试: 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(); <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属性。

同意dacris。 调用window.open的代码需要更接近按钮单击处理程序。 如果您正在使用异步响应处理程序对服务器进行AJAX调用,那么您已从按钮单击处理程序中解除window.open调用。 浏览器只能跟踪几个级别的堆栈深度(一些只有一个调用深度,其他几个调用深度),以查看是否从用户事件的执行上下文中调用window.open。 异步AJAX处理程序在按钮单击处理程序执行并返回其调用程序后执行很长时间。

解决问题的一种方法可能是解决问题:首先在按钮单击处理程序中打开弹出窗口,然后进行异步AJAX调用以验证输入,然后根据结果更新弹出窗口的URL异步处理程序中的AJAX调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM