【发布时间】:2012-04-12 13:21:00
【问题描述】:
我有一个嵌入了来自不同域的 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 iframe same-origin-policy onbeforeunload