@kalnin_yuri

Почему addeventlistener message не работает после перенаправления внутри окна?

У меня есть кнопка, по клику на которую выполняется след. код:

const newWindow = window.open(response.data.authUrl, 'newwindow', 'height=570,width=670,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no');
                newWindow.addEventListener('message', (event) => {
                    if (!event.data) {
                        return;
                    }
                    const data = JSON.parse(event.data);
                    if (data.action === 'amo-connected-success') {
                        this.getIntegration();
                        newWindow.close();
                    }
                });

В response.data.authUrl - лежит домен amocrm. Код выше открывает дочернее окно и в нем проходит oauth авторизация в amocrm, далее amocrm перенаправляет запрос обратно на сайт в этом же окне. По этому урл отрабатывает код:

document.addEventListener("DOMContentLoaded", function() {
        var data = {
            action: 'amo-connected-success',
        };
        window.postMessage(JSON.stringify(data), '*');
    });

Но почему-то это не работает.

При этом, если я для теста сразу открою окно с адресом текущего сайта а не амо, то все работает.

const newWindow = window.open('адрес-сайта.рф/путь', 'newwindow', 'height=570,width=670,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no');
                newWindow.addEventListener('message', (event) => {
                    if (!event.data) {
                        return;
                    }
                    const data = JSON.parse(event.data);
                    if (data.action === 'amo-connected-success') {
                        this.getIntegration();
                        newWindow.close();
                    }
                });
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
вроде бы, нельзя слушать события на окне с чужим доменом. На него можно только отправлять сообщения postMessage(), а слушать оно должно само. В обратную сторону, наоборот: вы слушаете события message на своём окне, и надеетесь, что Amo отправит вам (на window.opener) какое-то сообщение.

Посмотрите документацию OAuth авторизации в AmoCRM по шагам – надо добавлять параметр mode=post_message и ждать сообщения на своём окне.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 18:39
30000 руб./за проект
25 нояб. 2024, в 18:35
30000 руб./за проект
25 нояб. 2024, в 18:33
10000 руб./за проект