繁体   English   中英

Chrome 和 Edge 中的 iframe 同步问题

[英]Sync issue with iframe in Chrome and Edge

以下脚本用于在 IFRAME 中加载 web 应用程序。

          function openCashier(destination) {
                postIsAnonymous(function (data) {
                    if (data.IsAnonymous) {
                        window.parent.location.replace('<%= ResolveUrl("~/Popup/login") %>');
                    } else {
                        stateReset('showUserBtn');
                        WCore.OpenTab('cashier');
                        $("#cashierPopup").addClass(destination);
                        $("#cashierFrame").attr('src', '<%= ResolveUrl(Routing.GetUrl("Root-TPAutologin")) %>?Destinazione=' + destination);
                    }
                });
             }

在 Firefox 中,一切正常,而在 Edge 和 Chrome 中,我收到错误 404。如果我尝试在单独的浏览器 session 中加载 IFRAME 的内容,一切正常。 我尝试如下编辑 javascript,担心异步问题:

            function openCashier(destination) {
                setTimeout(function () {
                    postIsAnonymous(function (data) {
                        if (data.IsAnonymous) {
                            window.parent.location.replace('<%= ResolveUrl("~/Popup/login") %>');
                    } else {
                        stateReset('showUserBtn');
                        WCore.OpenTab('cashier');
                        $("#cashierPopup").addClass(destination);
                            $("#cashierFrame").attr('src', '<%= ResolveUrl(Routing.GetUrl("Root-TPAutologin")) %>?Destinazione=' + destination);
                        }
                    });
                }, 1000 * 20);
             }

有了这个技巧,问题就解决了,性能很差

PostIsAnonymous 代码如下:

function postIsAnonymous(successFunc) {
  $.ajax({
    type: "POST",
    url: '?checkIsAnonymous=1',
    cache: false,
    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
    processData: false,
    success: successFunc
  });
}

你有什么建议可以给我以更优雅的方式解决问题吗? 谢谢

我用下面的代码解决了这个问题。

 function openCashier(destination) {
                var dest = destination;
                sessionManager.isAnonymous()
                    .then((data) => {
                        if (data.IsAnonymous) {
                            window.parent.location.replace('<%= ResolveUrl("~/Popup/login") %>');
                        }
                        else {
                            stateReset('showUserBtn');
                            WCore.OpenTab('cashier');
                            $("#cashierPopup").addClass(dest);
                            $("#cashierFrame").attr('src', '<%= ResolveUrl(Routing.GetUrl("Root-TPAutologin")) %>?Destinazione=' + dest);
                        }
                    })
                    .catch((err) => {
                        console.error(err);
                    });
            }

 var sessionManager = {
    isAnonymous: () => {
    return new Promise((resolve, reject) => {
        $.ajax({
            type: "POST",
            url: '?checkIsAnonymous=1',
            cache: false,
            contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
            processData: false,
            success: function (data) {
                resolve(data);
            },
            error: function (data) {
                reject(data);
            }
        });
    })
   }
 }

暂无
暂无

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

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