ページを更新せずにブラウザのアドレスバーを変更する方法はありますか?


91

私はウェブアプリを開発しています。その中に、カテゴリと呼ばれるセクションがあり、ユーザーがカテゴリの1つをクリックするたびに、更新パネルが適切なコンテンツをロードします。

ユーザーがカテゴリをクリックした後、ブラウザのアドレスバーのURLを変更したい

www.mysite.com/products 

のようなものに

www.mysite.com/products/{selectedCat} 

ページを更新せずに。
これを達成するために使用できるJavaScript APIの種類はありますか?

回答:


157

HTML5では、リロードせずにURLを変更できます。

ブラウザの履歴に新しい投稿を作成する場合(つまり、戻るボタンが機能します)

window.history.pushState('Object', 'Title', '/new-url');

元に戻せずにURLを変更したいだけの場合

window.history.replaceState('Object', 'Title', '/another-new-url');

オブジェクトはajaxナビゲーションに使用できます。

window.history.pushState({ id: 35 }, 'Viewing item #35', '/item/35');

window.onpopstate = function (e) {
  var id = e.state.id;
  load_item(id);
};

詳細はこちら:http : //www.w3.org/TR/html5-author/history.html

代替ソリューション:https : //github.com/browserstate/history.js


4
+1また、注意してください。これらは、URL内pathquery stringURLを変更します。プロトコル、ドメイン、ポートを変更することはできません(他の人が指摘したように、これはセキュリティ上の問題になるため)。上記のhash関数は、アンカー(またはフラグメントID)を変更することができます
Chris S

2
ただ言うと、あなたの例 '/ item / 35'}には、追加の}が追加されています
Zhanger

余談ですが、これらのURLをGoogleでインデックスに登録できるようにする方法はありますか?
Peter Featherstone

1
優れたライブラリはgithub.com/browserstate/history.jsのようで、積極的に維持され、広く使用されていますが、fortes-history.jsは3年間アイドル状態でした。
Gonfi den Tschal 2013

2
Firefoxはタイトルをサポートしていないため、document.title = "new title"を使用してください。
2015

31

連中がすでに言っていることに追加するには、onclick関数で必要なURLと一致するようにwindow.location.hashプロパティを編集します。

window.location.hash = 'category-name'; // address bar would become http://example.com/#category-name

URLに「#」記号なしでURLを変更する方法はありますか?
SHEKHAR SHETE 2014年

7

セキュリティ上の理由から、URLに移動せずにアドレスバーを完全に異なるURLに直接操作することは許可されていません。

www.mysite.com/products/#{selectedCat}

つまり、同じページ内のアンカースタイルリンクは、現在ほとんどのJavaScriptライブラリに存在するさまざまな履歴/「戻るボタン」スクリプトを調べます。

更新パネルについての言及は、あなたがasp.netを使用していると推測します。その場合、asp.net ajax履歴コントロールが開始するのに適した場所です


3

アドレスバーの直感的ではない誤用であり、フィッシング攻撃を助長する可能性があるため、これは可能ではないと思います(少なくとも完全に異なるアドレスに変更します)。


直感的ではなく、フィッシング攻撃に悪用される可能性があるため、そうすることはできません。とにかく、それは+1です。
OregonGhost 2008

はい、ちょうどそれが私に起こりました。良い考えではありません。OregonGhostに感謝します。
ガルウェジアン2008

1
それが可能だと思います... Wikimapiaをチェックしてください...地図をドラッグすると、URLが変更されます...
Shivasubramanian A

@ Shivasubramanian-a:私はWikimapiaを見ました、そして確かに、彼らはsomejによって提案され、sanchothefatによって記述されたテクニックを使用しています:アンカー名を変更するだけです。フィッシングに対して安全です...
PhiLho 2008

-1

これはあなたが言っているようにはできません。somej.netが提案する方法は、最も近い方法です。これは、AJAX時代には実際に非常に一般的な方法です。Gmailでもこれを使用しています。


-1

「window.location.hash」

sanchothefatによって提案されているように、それを行う唯一の方法である必要があります。私がこの機能を見たすべての場所のため、それは常にURL内の#の後です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.