(まず、Chameleon は「フロント エンド」では実行されません。これは、入力として文字列 (テンプレート) と python dict (テンプレート パラメーター) を受け取り、別の文字列を出力として返す Python テンプレート ライブラリです。クライアントに送信されるとき、その出力はブラウザによって HTML ページとして解釈され、タグが埋め込まれている可能性があり<script>
ます。これらのタグ内の JavaScript がブラウザによって実行されます。これがクライアントで実行されます。)
さて、質問に移ります :) ブラウザのアドレス文字列に表示される URL を JavaScript から変更できます。これにより、ブラウザの履歴に新しいエントリが挿入されます。また、アプリケーションがその新しい URL の情報に基づいて状態を復元できるようにする必要があります。そうしないと、誰かが URL をブックマークしたり、新しいタブで開いたり、単にアプリケーションをリロードしたりすると、問題が発生します。
ブラウザの履歴を操作する歴史的に古い方法の 1 つは、window.location.hashを介して URL のハッシュ部分を変更することです。最小限の例を次に示します。
<html>
<body>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<input id="name-input" type="text" />
<script>
// restore the "application state" on page load -
// if there's a hash in the url we set the text in the input
if (window.location.hash) {
$('#name-input').val(window.location.hash.substring(1));
}
// whenever the hash changes (user clicked the Back button)
// we also need to modify the application state
$(window).on('hashchange', function () {
$('#name-input').val(window.location.hash.substring(1));
});
// type some text in the input and press Enter.
// Observe the URL changing. Try using the Back button.
$('#name-input').on('change', function () {
window.location.hash = $(this).val();
});
</script>
</body>
</html>
履歴を変更するもう 1 つの最新の方法は、history.pushState()を使用する方法です。これはより強力ですが、サーバー側のサポートが必要になる場合があります (サーバーは、アプリケーションが移行した新しい URL から正しいページを提供できる必要があります)。 to - URL がmysite.com/page1
, , のように見え、 to -から移行するためにmysite.com/page2
使用する場合、サーバーは両方の URL を処理できる必要があります)。pushState
/page1
/page2
また、この種の状況 (JSON データの取得、ページのレンダリング、URL の変更) に対処するために特別に構築されたクライアント側フレームワークが世界中に存在することにも注意する必要があります。手動で行う代わりにサイド フレームワークを使用すると、作業が簡素化されます。Backbone.jsは非常に最小限であり、他のフレームワークのように「唯一無二の真の方法」で物事を行う必要がないため、 Backbone.jsを調べることから始めます。