Как изолировать iframed сообщения, чтобы они не распространялись

Dallas Caley спросил: 28 марта 2018 в 04:45 в: angular

У меня проблема, которую я не могу сказать. Ситуация такова. У меня есть угловое приложение 5, в одном из моих компонентов я должен помещать iframe на другой сайт. IFrame предназначен для обработки кредитных карт и как он работает, вы получаете кодированный URL-адрес, а затем используете этот URL-адрес для вашего iframe. В iframe есть одно поле ввода. Когда вы закончите вводить номер кредитной карты в поле ввода, страница iframed отправляет сообщение родительскому лицу с закодированным значением, которое позже используется для обработки платежа.

Проблема, с которой я столкнулась, - это что сразу после получения сообщения с страницы iframed мое приложение перенаправляется на страницу входа в систему, и я не могу понять, что вызывает это.

Вот код, который задействован:

Шаблон:

<iframe sandbox="allow-scripts" id="cc-iframe" [src]="ccUrl"></iframe>

Контроллер:

this.paymentsService.getTokenizedField(this.paymentId).subscribe(response => {
    console.log('cc return url');
    console.log(response.url);
    this.ccUrl = this.sanitizer.bypassSecurityTrustResourceUrl(response.url);
    this.ccUrlReady = true;    window.addEventListener('message', (e) => {
        e.preventDefault();
        e.stopPropagation();
        let token = JSON.parse(e.data);
        console.log('HERES YOUR TOKEN: ', token);
    }, {capture: true, once: true});
});

И, очевидно, в моем приложении все остальное код, но Я не могу опубликовать это все здесь. Я довольно убежден, что решение этой проблемы - захватить событие и остановить его от барботажа или выполнить действие по умолчанию, но до сих пор мои усилия не сработали.

Я не знаю, что еще механизм может вызывать такое поведение.

Любые идеи?


1 ответ

Есть решение
Dallas Caley ответил: 28 марта 2018 в 07:24

Я выяснил, что происходит.

Оказалось, что где-то в коде был один из них:

window.onmessage = function(e) {
    //irrelevant code
    window.location.href = '/login/index';
    //more irrelevant code
}

я не смог найти это потому, что я искал в кодовой базе только "addEventListener", который, как я думал, был единственным способом прослушивания сообщений из iframe.