次のように、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;
}
}