如何在Safari / Chrome中重新加载页面的情况下如何修改页面URL的锚点?

时间:2012-07-12 16:31:34

标签: javascript google-chrome safari anchor

我正在尝试在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;
    }
}

3 个答案:

答案 0 :(得分:0)

简单地

location.href = '#newHash';

或者,如果您的意思是想要在内部框架的页面内对框架集父级进行此操作,请使用

top.location.href = '#newHash';

答案 1 :(得分:0)

答案 2 :(得分:0)

试试这些

function getLocationHash() {  
        alert(window.location.hash);  
    }  

function setLocationHash(hash) {  
        window.location.hash = hash;  
}

一样打电话
setLocationHash("#your-hash-string");