Firefox将新的iframe src视为来自jquery .click()触发器的弹出窗口

时间:2013-04-04 23:34:35

标签: jquery firefox popup click submit

我有两种形式,我试图同时提交它们。一个是发布到我们的PHP框架,另一个是发布到外部系统(prestashop安装),这似乎要求用户通过正常的单击提交表单来“访问”页面来处理表单。

我的解决办法是,在解雇另一个表格之后开火一个表格

$(document).ready(function() {
    $('#loginForm2').hide(1);
    $("#loginButton").click(function() {
        $("#userEmail2").val($("#userEmail").val());
        $("#userPassword2").val($("#userPassword").val());
        $.post(
            $("#loginForm").attr("action"), $("#loginForm").serialize(), function(data) {
                // alert('posted to users/login successfully');
                $("#SubmitLogin").click();
            }
        );
        return false;
    });
    function refresh() {
        location.reload();
    }
});

#loginForm2表单被发送到同一页面上的隐藏iframe,iframe在加载页面后刷新(并登录用户)。

<iframe id="loginIframe" style="display:none;" onload="refresh();"></iframe>

这在Chrome和Safari中效果很好,但在Firefox中,它会将iframe视为弹出窗口而不会执行此操作(除非用户说允许弹出窗口)。

有没有办法绕过Firefox认为这个iframe是一个弹出窗口?我明白为什么要这样做;它不是用户点击的真实事件,而是来自jquery的虚拟鼠标点击。我已经查找了一些解决方案,尝试点击“正宗”鼠标点击但没有找到任何似乎有用的东西。

1 个答案:

答案 0 :(得分:2)

以下是解决方案:

使其成为您单击外部系统(prestashop)表单的提交按钮而不是主系统的登录按钮(使用CSS隐藏主要系统并显示外部系统)。然后这样做:

    $("#SubmitLogin").click(function() {
        var loaded = 0;
        $("#userEmail2").val($("#userEmail").val());
        $("#userPassword2").val($("#userPassword").val());
        $.post(
            $("#loginForm").attr("action"), $("#loginForm").serialize(), function(data) {
                loaded++;
                if (loaded > 1) {
                    location.reload();
                }
            }
        );
        $('#loginIframe').load(function() {
            loaded++;
            if (loaded > 1) {
                location.reload();
            }
        });
    });

加载的变量是为了确保在发送主登录的序列化数据之前加载prestashop窗口时,如果没有完成主登录,则不会刷新。

显然,iframe看起来像这样

<iframe id="loginIframe" name="loginIframe" style="display:none;"></iframe>

在Chrome Firefox和Safari中测试过。