所以我认为没有真正可靠的解决方案,但我发现了一些可以阻止回调堆叠的东西。
解决方案(非产品)
如果您删除 WorldPay 事件监听器,那么您注册的回调将不再被调用:
window.removeEventListener("message", Worldpay.template.messageListener, false);
1)成功回调(不推荐)如果你总是卸载
成功,你可以把它放在配置的成功回调中:Worldpay.useTemplateForm
templateForm
'callback': function (obj) {
window.removeEventListener("message", Worldpay.template.messageListener, false);
worldPaySuccessCallBack(obj)
},
2)当您从 DOM 中删除 WorldPay 表单时,
我没有太多经验,Angular
但是当您不再Worldpay
呈现表单时,我会致电该removeEventListener
行。
3)在componentWillUnmount(反应)
上,我碰巧在使用时遇到了这个问题,react
所以我把这removeEventListener
条线放在componentWillUnmount
我的Worldpay
组件中。
请注意
我不建议在生产中采用这种方法的原因是,如果您通过( https://cdn.worldpay.com/v1/worldpay.jsWorldPay
) 加载您的库,那么它使用的是未版本化的库。cdn
Worldpay 当前部署更新到这个 url 最新的是:
WorldpayJS v0.75.1 - Wed, 17 Jan 2018 12:10:44 GMT
因此,如果对象路径不遵循正常规则,Worldpay.template.messageListener
则它们可能随时更改。semver