javascript - 如何删除 Stripe 的 iframe?
问题描述
我在内部单页应用程序上使用带有 vue-stripe-elements-plus 的 Stripe Elements。由于在用户离开更改信用卡模块后不需要保持条带代码运行,我想完全卸载条带,但它似乎并不那么容易。
在我在组件的destroyed
钩子中卸载它并删除添加的 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);
}));
},
Stripe 添加的 iframe:
一段时间后再次出现(其中之一):
似乎这个 iframe 是由 Stripe 的侦听器重新创建的,这些侦听器在消息事件上附加到 window 对象。我无法删除此侦听器,因为处理程序函数位于 iframe 内部的 iframe 中,因此浏览器不会让我访问其内部。
此外,此侦听器正在发出不需要的条带化请求:
XHR finished loading: POST "https://m.stripe.com/4".
解决方案
您可以使用setTimeout(destroyed, 1000)
推荐阅读
- javascript - Redux 双重调度动作
- command-line - 如何检查是否使用纱线安装了特定依赖项?
- c++ - OpenCV C ++中透视变换中的图像保留
- javascript - 如何增加标题右列的宽度
- python - 使用 Scrapy,返回的 HTML 文件在目录中被涂黑并打开 404 错误。知道为什么吗?
- r - 为什么汇总的四分位数与手动计算的四分位数不同?
- c# - 创建 Dynamics CRM 插件以执行外部任务
- docker - 将 Gitlab Secrets 传递给 CI 中的 docker build
- haskell - 在 haskell 中使用替代前奏
- google-apps-script - 动态查询函数