在远程iframe中抑制onbeforeunload

时间:2012-03-28 21:49:25

标签: javascript iframe same-origin-policy onbeforeunload

我有一个嵌入来自不同域名的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的sandbox属性,但似乎无法可靠地工作。

我能够取消确认框的唯一方法是删除链接的onclick处理程序中的iframe:

iframe = document.getElementById("payment_iframe");
iframe.parentNode.removeChild(iframe)

你觉得那个黑客有什么问题吗?这甚至应该有效吗?你知道有什么更好的方法来实现同样的目标吗?

由于

1 个答案:

答案 0 :(得分:1)

不,这是一个非常好的和可靠的解决方案,前提是它需要javascript才能正常工作。

(你会想念的一个边缘案例是那些为你的页面关闭了javascript的极客,但不是支付提供商,但听到它的声音,他们只会得到这个烦人的超级一个额外的问题,他们是善良的无论如何要求,在某种程度上。)