Javascript 如何去除条纹';什么是伊夫拉姆斯?
我在内部单页应用程序上使用带vue Stripe Elements plus的Stripe元素。由于用户离开更改信用卡模块后不需要继续运行条带代码,所以我想完全卸载条带,但看起来并不那么容易 在我将其卸载到组件的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
销毁的钩子中并移除添加的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>