ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 如何防止iframe修改顶级浏览上下文(top.history)?

2019-07-11 09:34:04  阅读:183  来源: 互联网

标签:javascript html5 iframe html5-history


我尝试创建一些布局管理Web应用程序,它能够托管其中的其他子应用程序(同域).

Overview

目前,主应用程序可以跟踪子应用程序中的任何导航并在主应用程序中保存导航记录.用户可以单击后退或前进按钮转到最近页面.一切正常,直到我在子应用程序中找到一些代码,以编程方式更改location.hash属性或在子应用程序中调用history.pushState方法.

通常,浏览器会自动将旧历史状态添加到正确的子应用程序的历史堆栈中.但是现代浏览器总是在主应用程序和导致主要应用程序的破碎历史的所有其他iframe(子应用程序)之间共享历史堆栈.用户无法在浏览器中单击返回主应用程序之前访问的上一页.

根据W3C

The joint session history of a top-level browsing context is the union
of all the session histories of all browsing contexts of all the fully
active Document objects that share that top-level browsing context,
with all the entries that are current entries in their respective
session histories removed except for the current entry of the joint
session history.

我有两个问题.

>是否可以为每个iframe创建单独的历史记录?我尝试像这样设置document.domain.

>主要应用领域是’apps.site.com’.
>子应用程序域是’apps.site.com’但我将其更改为’site.com’以防止跨站点脚本.但它不起作用,因为浏览器同步此历史记录而不是iframe.

>有没有办法阻止iframe导航/ hashchange / pushState?
我目前的想法是修补每个相关的属性/方法,并听取click事件以防止更改浏览器历史记录.我不确定这会起作用,这样做似乎太冒险了.

谢谢,

参考:
https://html.spec.whatwg.org/multipage/browsers.html#traverse-the-history

解决方法:

我知道Chrome有一个新标签,它在一个与您的应用程序不同的进程中运行.您可以查看:https://developer.chrome.com/apps/tags/webview

但是这个标签不是HTML5标准化的标签.大多数其他主流浏览器都不支持此功能.

但对于Iframe,答案是否定的.

标签:javascript,html5,iframe,html5-history
来源: https://codeday.me/bug/20190711/1430741.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有