我正在尝试在javascript中修改页面的URL(实际上是父框架集),如下所示:
function b(str) {
window.top.location.hash = str // originally was "#"+str
return true
}
这是从gen.php中的锚点调用的,如下所示:
<a onclick="b('Page29.html')" href="Page29.html" target="content">
顶级页面如下所示:
<!doctype html>
<html>
<head>
<title>Test</title>
</head>
<frameset cols="320,*" frameborder="0" border="0" framespacing="0">
<frame name="menu" src="gen.php">
<frame name="content" src="about:blank">
</frameset>
</html>
这在Firefox中运行良好,但在Safari中(更新:AND)Chrome只需更改锚点即可重新加载整个页面!这是一个问题,因为我的页面中的状态正在丢失。我该如何抑制这种行为?
以下是我根据以下建议尝试的更新代码:
function b(str) {
top.location.href = "#"+str
return true
}
在这种情况下,当我点击链接时,顶级框架会掉落,页面会被gen.php#Page29.html替换。
更新:看起来像frame.hash无法在框架中工作是WebKit中的一个错误,自2009年以来出现: https://bugs.webkit.org/show_bug.cgi?id=24578
根据以下答案,以下是我提出的修复方法:
function b(str) {
if(history.pushState) {
top.history.replaceState(null, top.document.title, '#'+str);
} else {
top.location.hash = hash;
}
}
答案 0 :(得分:0)
简单地
location.href = '#newHash';
或者,如果您的意思是想要在内部框架的页面内对框架集父级进行此操作,请使用
top.location.href = '#newHash';
答案 1 :(得分:0)
你应该在“pushState”上找一个厕所 http://badassjs.com/post/840846392/location-hash-is-dead-long-live-html5-pushstate
答案 2 :(得分:0)
试试这些
function getLocationHash() {
alert(window.location.hash);
}
function setLocationHash(hash) {
window.location.hash = hash;
}
像
一样打电话setLocationHash("#your-hash-string");