IE11 window.opener在访问另一个网站后为null

时间:2019-01-24 09:48:58

标签: null cross-domain internet-explorer-11 window.open

我正在使用node.js + angularJS 1.5.7

当我在外部认证或购买时使用弹出窗口时

ex> mysite =>弹出窗口打开(A)=>身份验证(例如google)=>发布(A)=> window.opener.postMessage

像这样的脚本。

        /* request code */
        var child = null;
        child = window.open('', pop_title, opt);
        child.location = url;
        child.focus();
        var frmData = document.payForm;
        frmData.target = pop_title;
        frmData.action = url;
        frmData.submit();

        var leftDomain = false;
        var interval = setInterval(function () {
            try {
                if (child.document.domain === document.domain) {
                    if (leftDomain && child.document.readyState === "complete") {
                        clearInterval(interval);
                        child.postMessage({message: "requestResult"}, "*");
                    }
                } else {
                    leftDomain = true;
                }
            } catch (e) {
                // we're here when the child window has been navigated away or closed
                if (child.closed) {
                    clearInterval(interval);
                    return;
                }
                // navigated to another domain
                leftDomain = true;
            }
        }, 500);

        /* child page */
        document.domain = "mysite.com"
        targetWindow = window.opener;
        targetWindow.postMessage({ message: "deliverResult", result: "succ" , msg: "¿¿¿ ¿¿ ¿¿¿ ¿¿¿¿¿¿¿.", tid: "<?=$_POST["Tradeid"]?>"}, "*");

此代码可在Edge或Chrome中使用。 但是IE11无法正常工作。

我尝试了另一种方式

        localStorage.setItem("orgWindow",window);
        localStorage.getItem("orgWindow");

但是这也不起作用。找到窗口。但是Opener为空。

我在IE11临时使用IFrame。但是我想要Popup All浏览器。

请给我任何想法。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您查看Window.Opener的文档,则会发现IE的兼容性未知。

参考: Window.opener

这可能是为什么它无法在IE中按预期工作的原因。您可以尝试使用下面的链接中的替代方法。

window.opener alternatives