8

パラメータなしで URL を抽出する方法について、多くの回答が見つかりました。

新しい URL でページをリロードせずに、アドレス バーの URL を書き換えるにはどうすればよいですか?

shortURL = top.location.href.substring(0, top.location.href.indexOf('?'));
top.location.href = shortURL // Causes redirect

目標は、Javascript でパラメーターを抽出することですが、アドレス バーには表示しません。

4

5 に答える 5

12

Historyオブジェクトをサポートする最新のブラウザでは、history.replaceState()またはhistory.pushState()を使用して、現在のページを変更せずに現在のURLを変更できます。変更できるものには制限があります(たとえば、セキュリティ上の理由から、この方法でドメイン/オリジンを変更することはできません)。

これらの方法の概要については、こちらをご覧ください。

ブラウザの履歴は、閲覧セッションのどこにいたかを記録したものです。 .replaceState()履歴リストの現在のアイテムを別のアイテムに置き換えることができます。 .pushState()ブラウザの履歴に新しいアイテムを追加し、両方ともページをリロードせずにブラウザのURLバーに表示されるURLを変更します。この特定のページエントリに対してブラウザの「戻る」ボタンをどのように動作させるかに応じて、使用する方法を選択します。

注:これらのAPIは、IE10以降でサポートされています。

履歴APIをサポートしていない古いバージョンのブラウザでは、ページをリロードせずに変更できるURLの部分は、URL#の最後にあるハッシュタグ(記号の後の部分)だけです。

于 2011-12-14T19:54:17.737 に答える
6

html5 では、ページをリロードせずに URL を書き換えることができます (セキュリティ上の理由からドメイン名を変更することはできません)。履歴 API を使用すると、次のように記述できます。

history.replaceState("object or string", "title", "/another-new-url");

最初の 2 つのパラメーターは任意で、3 番目のパラメーターは新しい URL (ドメイン名を含まない) です。前の URL に戻るための戻るボタンを有効にする場合は、上記pushStateの代わりに使用しreplaceStateます。これらの関数の詳細については、このブログ投稿を参照してください。

ブラウザのサポートに関しては、最近の Firefox と Chrome のバージョンでサポートされていますが、まだあまり一般的ではない IE10+ でのみサポートされています。詳細については、互換性マトリックスまたはブラウザー実装の詳細を参照してください。

于 2013-01-20T12:07:58.460 に答える
2

リダイレクトせずにアドレス バーの値を変更することはできません。それはフィッシング詐欺師の夢の実現です!

ただし、フラグメント識別子を変更することはできます: (JavaScript では、window.location.hash値)

<!DOCTYPE html>
<html>
<head>
<title>This is a test</title>
<script>
window.onload = function() {
    window.location.hash = "Loaded!";
    document.getElementById("click-me").onclick = function() {
        window.location.hash = "Click!";
        document.getElementById("click-me").onclick = function() {
            window.location.hash = "Clicked AGAIN!";
        };
    };
}
</script>
<body>
<div>
<input type="button" id="click-me" value="click me!" />
</div>
</body>
</html>

ただし、クエリ文字列を変更すると、ページがリダイレクトされます。

于 2011-12-14T19:57:21.337 に答える
1

HTML 5履歴APIの一部である新しいプッシュステートを使用できる場合があります。これにより、実際にブラウザーをリロードせずにURLを変更できます。

簡単な例についてはhttp://badassjs.com/post/840846392/location-hash-is-dead-long-live-html5-pushstateを確認し、詳細な例についてはhttp://diveintohtml5.info/history.htmlを確認してください。および制限:

于 2011-12-14T20:15:19.277 に答える
0

その可能性はないと思います。おそらく、ロード後にURLを書き換えて、return falseを追加できるので、リロードを防ぎますが、それ以外の場合は、URLに対してフォームPOSTを実行してそれを実現する必要があります。パラメータは表示されません。

于 2011-12-14T19:54:40.463 に答える