Как удалить фреймы Stripe? - PullRequest
4 голосов
/ 12 марта 2019

Я использую Stripe Elements с vue-stripe-elements-plus во внутреннем одностраничном приложении.Поскольку нет необходимости поддерживать код Stripe после того, как пользователь оставляет модуль смены кредитной карты, я хочу полностью выгрузить Stripe, но это не так просто.

После того, как я выгрузил его в destroyed компонентный хук и удалил добавленные фреймы:

destroyed () {
        this.$unloadScript('https://js.stripe.com/v3/');
        //delete window.Stripe; // commented because this makes stripe add iframes twice

        let stripeIframes = [
            document.querySelectorAll('[name^=__privateStripeMetricsController]'),
            document.querySelectorAll('[name^=__privateStripeController]'),
        ];

        stripeIframes.forEach(iframes => iframes.forEach(iframe => {
             iframe.parentNode.removeChild(iframe);
        }));
},

фреймы, которые были добавлены Stripe:

enter image description here

снова появляются через некоторое время (один из них):

enter image description here

Похоже, этот iframe воссоздается слушателями Stripeкоторые были прикреплены к объекту окна при событии сообщения.Я не могу удалить этот слушатель, потому что функция обработчика находится в iframe, который находится внутри iframe, поэтому браузер не разрешает мне получать доступ к его внутренним объектам.

Кроме того, этот слушатель делает нежелательные запросы на чередование:

XHR finished loading: POST "https://m.stripe.com/4".

1 Ответ

0 голосов
/ 09 апреля 2019

Вы можете использовать setTimeout(destroyed, 1000)

...