我有一个页面嵌入了来自不同域的 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)
你觉得这个 hack 有什么问题吗?这甚至应该工作吗?你知道有更好的方法来完成同样的事情吗?
谢谢
最佳答案
不,这是一个非常好的和可靠的解决方案,前提是它首先需要 javascript 才能工作。
(您会错过的一个极端情况是极客关闭了您页面的 javascript,但没有关闭支付提供商,但听上去,他们只会得到这个烦人的多余的额外问题,他们很友善无论如何,在某种程度上要求。)
关于javascript - 在远程 iframe 中抑制 onbeforeunload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916167/