0

次のように、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)では、アンカーを変更するだけでページ全体が再読み込みされます。私のページに失われている状態があるので、これは問題です。この動作を抑制するにはどうすればよいですか?

以下の提案に基づいて私が試している更新されたコードは次のとおりです。

function b(str) {
  top.location.href = "#"+str
  return true
}

この場合、リンクをクリックすると、最上位のフレームがドロップし、ページがgen.php#Page29.htmlに置き換えられます。

更新:フレームで動作しないlocation.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;
    }
}
4

3 に答える 3

0

単に

location.href = '#newHash';

または、内側のフレームのページ内からフレームセットの親にこれを適用する場合は、次を使用します。

top.location.href = '#newHash';
于 2012-07-12T16:33:14.087 に答える
0

「pushState」 http://badassjs.com/post/840846392/location-hash-is-dead-long-live-html5-pushstateで略奪する必要があります

于 2012-07-12T16:33:53.480 に答える
0

これらを試してください

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

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

のように呼び出す

setLocationHash("#your-hash-string");
于 2012-07-12T16:42:35.090 に答える