Javascript 如何去除条纹';什么是伊夫拉姆斯?

Javascript 如何去除条纹';什么是伊夫拉姆斯?,javascript,vue.js,iframe,stripe-payments,Javascript,Vue.js,Iframe,Stripe Payments,我在内部单页应用程序上使用带vue Stripe Elements plus的Stripe元素。由于用户离开更改信用卡模块后不需要继续运行条带代码,所以我想完全卸载条带,但看起来并不那么容易 在我将其卸载到组件的销毁的钩子中并移除添加的iframe之后: destroyed () { this.$unloadScript('https://js.stripe.com/v3/'); //delete window.Stripe; // commented becau

我在内部单页应用程序上使用带vue Stripe Elements plus的Stripe元素。由于用户离开更改信用卡模块后不需要继续运行条带代码,所以我想完全卸载条带,但看起来并不那么容易

在我将其卸载到组件的
销毁的
钩子中并移除添加的iframe之后:

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);
        }));
},
通过条带添加的iFrame:

一段时间后再次出现(其中一个):

似乎这个iframe是由Stripe的侦听器重新创建的,这些侦听器在消息事件上附加到窗口对象。我无法删除此侦听器,因为处理程序函数位于iframe内部的iframe中,因此浏览器不允许我访问其内部

此外,此侦听器正在对条带进行不必要的请求:

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

您可以使用
setTimeout(destromed,1000)

而不是手动从DOM中删除元素,您应该使用。它还应该清除所有条带侦听器

使用此库,您可以尝试以下内容:


设stripe=window.stripe('pk\u test\uuuxxxxxxxxxx'),
elements=stripe.elements(),
卡片=未定义;
导出默认值{
名称:'付款',
安装的(){
卡片=元素。创建('card');
挂载(此$refs.卡);
},
在…之前{
销毁卡片(此$refs.卡片);
},
}
    <template>
     <div ref="card" />
    </template>
    
    <script>
    let stripe = window.Stripe('pk_test_xxxxxxxxxxxx'),
        elements = stripe.elements(),
        card = undefined;
    
    export default {
        name: 'Payment',
        mounted() {
          card = elements.create('card');
          card.mount(this.$refs.card);
        },
        beforeDestroy() {
          card.destroy(this.$refs.card);
        },
    }
    </script>