Home > Software design >  Sync issue with iframe in Chrome and Edge
Sync issue with iframe in Chrome and Edge

Time:05-27

the following script is used to load in a IFRAME a web application.

          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);
                    }
                });
             }

In Firefox everything works fine, while in Edge and Chrome I get error 404. If I try to load the contents of the IFRAME in a separate browser session everything works. I tried to edit the javascript as follows, fearing an asynchronism problem:

            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);
             }

With this trick the problem is solved with very bad performances.

PostIsAnonymous code is the following :

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
  });
}

Do you have any suggestions to give me to solve the problem in a more elegant way? Thank you

CodePudding user response:

I solved the problem with the following code.

 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);
            }
        });
    })
   }
 }
  • Related