【问题标题】:Javascript/JQuery prevent navigation totally inside an iFrameJavascript/JQuery 完全阻止 iFrame 内的导航
【发布时间】:2017-07-16 07:46:41
【问题描述】:

我在 iframe 中加载了相同的域页面(使用沙盒属性)。我使用以下代码来防止点击(和所有其他元素)离开页面:

$('#preview_frame').contents().find('body *').off('click').click(
        function(event){
            event.stopPropagation();
            event.preventDefault();
        }
    );

但是,页面上的其他 Javascript 似乎正在通过 window.location.hrefwindow.location.replace 重定向导航。

我无法更改 iframe 内页面的代码,因为它们是从其他网站代理的。

我尝试使用 iframe 卸载事件但没有成功。

无论做什么/如何完成,我都需要禁用在 iframe 内导航的功能。我不是在谈论可以使用沙盒属性禁用的顶级父导航,我是在谈论 iframe 本身内部的导航。

有可能实现吗?

【问题讨论】:

  • 使用beforeunload 事件可以在导航更改发生之前向用户显示一条消息 - 但这不适用于所有浏览器/设置,特别是对于您需要测试并找出的 iframe .如果这不是一个选项,那么您将不得不更深入地研究当其他脚本更改位置时发生的情况,从触发它的原因开始。
  • @CBroe 不幸的是 beforeunload 事件无法取消 url 更改。
  • 尝试将事件监听器委托给文档。它也不会影响任何非 jquery 事件侦听器或内联事件侦听器。不检查页面代码没有简单的答案
  • @charlietfl 我的问题是 iframe 中加载的内容几乎来自任何在线网站,因此即使我优化并处理了特定页面,另一个页面也可以包含其他导航方法。我的目标是禁用任何导航的可能性,无论是什么导致它在 Javascript 中可行?
  • 没有“一刀切”答案

标签: javascript jquery iframe jquery-events


【解决方案1】:

您的代码似乎正确。如果 iframe 中的页面来自同一个域,则删除沙箱属性。希望能解决问题。

沙盒属性始终将内容视为唯一来源。

【讨论】:

  • 我发布的防止链接点击的代码有效。我已经知道了。问题是询问如何防止 window.location.href 事件或更好的任何 URL 更改请求。
  • 如果没有任何事件触发位置更改,我认为我们无法阻止 iframe 更改位置。
猜你喜欢
  • 2016-01-05
  • 2018-11-15
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多