在远程 iframe 中禁止 onbeforeunload 事件

3
我有一个页面,它嵌入了来自不同域的iframe(用于信用卡支付)。在iframe中加载的页面注册了一个onbeforeunload处理程序。这意味着每当我尝试导航离开父页面或重新加载时,它都会要求用户确认。到目前为止还好。
然而,在父页面上应该有交互,而不会调用iframe中的onbeforeunload处理程序。下面是一个简化的示例:
<iframe src="https://paymentprovider.com/payment"></iframe>
<a href="/abort_payment">Abort payment (fire onbeforeunload)</a>
<a href="/alternative_payment">I don't have a credit card (suppress onbeforeunload)</a>

我无法使用iframe沙盒,因为iframe需要JavaScript才能工作。我还尝试动态设置iframe的沙盒属性,但这似乎不太可靠。
我唯一能够抑制确认框的方法是在链接的onclick处理程序中删除iframe:
iframe = document.getElementById("payment_iframe");
iframe.parentNode.removeChild(iframe)

你认为那个黑客有什么问题?这是否应该运行?你知道实现同样目的的更好的方法吗?

谢谢


听起来是个不错的解决办法。 - Matt Montag
1个回答

1

不错,这是一个相当好的和可靠的解决方案,前提是需要javascript才能使其正常工作。

(你会错过的唯一一种情况是那些已经关闭了你页面上的javascript但没有关闭支付提供者的极客,但从声音来看,他们只会得到这个烦人的多余问题,他们在某种程度上也是在寻求这个问题的答案。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接