javascript - 在远程 iframe 中抑制 onbeforeunload

标签 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 的沙箱属性,但这似乎无法可靠地工作。

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

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

你觉得这个 hack 有什么问题吗?这甚至应该工作吗?你知道有更好的方法来完成同样的事情吗?

谢谢

最佳答案

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

(您会错过的一个极端情况是极客关闭了您页面的 javascript,但没有关闭支付提供商,但听上去,他们只会得到这个烦人的多余的额外问题,他们很友善无论如何,在某种程度上要求。)

关于javascript - 在远程 iframe 中抑制 onbeforeunload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916167/

相关文章:

javascript - 如何使用 JavaScript 访问 CouchDB? SOP错误

javascript - 如何创建本地 MongoDB _id

javascript - 理解 Javascript 中的 try..catch

javascript - 将对象中未使用的键与未定义的键进行比较是否正确?

javascript - 如何在 iframe 中维护 Angular 应用程序的页面重新加载路线?

javascript - 使用 jQuery 处理 html5 iframe 内的用户点击

javascript - 如何在 TIdHTTPServer 中实现 ajax 进度?

iframe - IE7跨域iFrame Select问题

javascript - 为什么我的 JavaScript 代码收到“"No ' Access-Control-Allow-Origin' header is present on the requested resources”错误,而 Postman 却没有?

javascript - 同源政策 - 仍然没有得到它