防止历史记录传播到父窗口
Prevent history propagation to the parent window
我有两个简单的html页面:父和子。Parent将child存储在iframe
中。
Parent.html:
<html>
<head></head>
<body>
<input type="text" id="text" />
<input type="button" value="change hash" onclick="javascript:changeHash()" />
<iframe src="Child.html"></iframe>
<script type="text/javascript">
function changeHash () {
window.location.hash = document.getElementById('text').value;
}
</script>
</body>
</html>
和Child.html:
<html>
<head></head>
<body>
<input type="button" value="go back" onclick="javascript:goBack()" />
<script type="text/javascript">
function goBack () {
this.history.back();
}
</script>
</body>
</html>
我使用change hash按钮向历史记录添加几个哈希值。当我按返回iframe
内的按钮时,父页面的哈希值被更改。这似乎是规范的行为。
所以问题是:是否有可能防止传播从iframe回到它的父页?所以我希望iframe不要改变父节点的历史/散列。
注:与go
函数相同(实际上,go(-1)
与back()
相同)。
我认为不使用框架是不可能做到这一点的,但是我有一个解决方案可以(部分地)解决这个问题。
首先,我想改变对象history
并重新定义它,但这是不可能的,因为它是窗口内的属性,不可写。但是我们可以重新定义history
内部的函数。
这就是导致我重新定义函数back()
的原因,而不是让history
对象做他的工作,我们必须找到以前的url并改变文档(子)的位置。
在Child.html
中,像这样重新定义函数back()
:
history.back = function ()
{
document.location = document.referrer;
}
我们在这个函数中遇到的问题是,一旦父文档被加载,iframe(子)也被加载,子文档的document.referrer
返回父文档的url
因此,在更改document.location
之前,让我们测试document.referrer
是否与父url(不带锚)不同
history.back = function ()
{
var url = window.parent.document.location.href.split("#")[0];
if(document.referrer!=url)
document.location = document.referrer;
}
最后,这是我找到的解决方案,不幸的是它有一个问题,就是你不能重新定义功能forward()
,允许你去下一个url,这是不可能找到下一个url, document.referrer
返回你来自的页面的url,它可能是前一页或下一页。但是你仍然可以在iframe内部导航而不改变父位置。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 防止Iframe窗体在新窗口中打开
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调整窗口大小时,可拖动的对象会出现在容器外部
- Javascript排序的图像弹出窗口..可以't单独弹出
- 窗口大小html css
- 弹出窗口出现,然后退出
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- Javascript更新孙窗口中的表单元素
- 如何在选项卡上定义属性'的主窗口对象
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 召回窗口加载事件 - javascript
- 为什么不显示警报窗口
- 如何使用modalDialog来显示可以在所有浏览器中工作的弹出窗口
- Chrome应用程序调整窗口大小保持纵横比
- 新选项卡被弹出窗口阻止程序阻止
- 如何访问UIWebView'的子窗口上下文
- 刷新父窗口后无法关闭窗口
- 防止历史记录传播到父窗口
- 窗口.将停止传播的大小调整为更高的断点