【发布时间】:2014-09-21 22:02:31
【问题描述】:
我有 2 个简单的 html 页面:父页面和子页面。父级将子级存储在 iframe.
父.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>
我使用 更改哈希 按钮将多个哈希添加到历史记录。当我按下iframe 内的返回 按钮时 - 父页面的哈希值已更改。这似乎是spec 的行为。
所以问题是:是否可以防止从 iframe 返回到其父页面的传播?所以我希望 iframe 不要更改父级的历史记录/哈希。
注意:go 函数的行为相同(实际上,go(-1) 与 back() 相同)。
【问题讨论】:
-
如果iframe可以和parent通信,你就不能恢复丢失的hash吗?速度很快,没人会注意到。
-
@vsync,问题在于外部页面哈希
hashchange事件订阅,这就是导航的完成方式。所以应用程序会将用户导航回来。 -
尝试自己实现一个
history navigation堆栈(例如使用localStorage)并将goBack函数更改为不依赖window.history。 -
@php-dev,当然,这是一个解决方案。但这只是一种有趣的行为,现在它只是一种“挑战”。
标签: javascript iframe browser-history hashchange