не может получить доступ к исходному объекту, когда window.postMessage в Edge - PullRequest
5 голосов
/ 03 марта 2020

В настоящее время я использую Edge 44.18362, у меня есть окно аутентификации и родительское окно, которое открывает его, как только аутентификация завершена, я отправляю сообщение родителю (открывающему окну) следующим образом:

$window.opener.postMessage(data,URL);

и я слушаю событие в родительском окне следующим образом:

window.addEventListener('message', someFunc, false);

и someFunc() определяется следующим образом:

function someFunc(windowData){
//here I am accessing source as windowData.source
}

Я пытаюсь получить доступ source атрибут MessageEvent для доступа к URL и прочему. В Chrome / Firefox я могу получить доступ к объекту source, и функциональность работает нормально, но когда дело доходит до Edge, я не могу получить доступ к объекту source и вижу эту ошибку в консоли.
!0:
enter image description here
Что здесь не так, что можно сделать, чтобы это исправить?

Добавлен try-catch вокруг блока кода, это ошибка I видеть. enter image description here

1 Ответ

3 голосов
/ 04 марта 2020

Я сделал тест со следующим примером кода, и он может хорошо работать в Edge:

Page1. html:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />
    <script>
        function openChild() {
            var childwin = window.open('Page2.html', 'popup', 'height=300px, width=500px');
        }

        window.addEventListener("message", (event) => {
            let txt = document.querySelector('#txtMsg');
            txt.value = `Name is ${event.data.pName} Age is  ${event.data.pAge}`;
            console.log(event.source);  //update: get event.source
        });
    </script>
</head>
<body>
    <form>
        <fieldset>
            <input type='button' id='btnopen' value='Open child' onclick='openChild();' />
            <input type='text' id='txtMsg' />
        </fieldset>
    </form>
</body>
</html>

Стр. html:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />
    <script>
        function sendMessage() {
            let msg = { pName: "Bob", pAge: "35" };
            window.opener.postMessage(msg, 'http://domain_name/Page1.html')
            window.opener.focus();
        }
    </script>
</head>
<body>
    <form>
        <fieldset>            
            <input type='button' id='btnSendMsg' value='Send Message' onclick='sendMessage();' />
        </fieldset>
    </form>
</body>
</html>

Результат:

enter image description here

Вы можете сослаться к образцу, если он все еще не работает, предоставьте минимальный образец, который может воспроизвести проблему. Только с предоставленным вами кодом я не могу воспроизвести проблему.

...