(首先,Chameleon 不会在“前端”运行——它是一个 Python 模板库,它接受一个字符串(您的模板)和一个 Python 字典(模板参数)作为输入,并返回另一个字符串作为其输出。当发送到客户端时,该输出被浏览器解释为 HTML 页面,可能带有嵌入<script>
的标签。这些标签中的 JavaScript 然后由浏览器执行 - 这就是在客户端上运行的内容。)
现在,关于您的问题 :) 您可以从 JavaScript 更改浏览器地址字符串中显示的 URL,这将在浏览器的历史记录中插入一个新条目。您还需要以某种方式确保您的应用程序可以根据该新 URL 中的信息恢复其状态,否则如果有人为该 URL 添加书签、在新选项卡中打开它或只是重新加载应用程序,事情就会中断。
一种历史上较旧的处理浏览器历史记录的方法是通过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>
另一种更现代的修改历史的方法是通过history.pushState(),它更强大但可能需要一些服务器端支持(您的服务器将需要能够从您的应用程序转换的新 URL 提供正确的页面to - 如果你的 URL 看起来像mysite.com/page1
, mysite.com/page2
,并且你pushState
用来从/page1
to转换/page2
- 服务器需要能够处理这两个 URL)。
您还需要注意,有一整个世界的客户端框架专门用于处理这种情况(检索 JSON 数据、呈现页面、修改 URL),所以也许您会发现使用客户端 -侧框架而不是手动做事情简化了事情。我会首先查看Backbone.js,因为它非常小,并且不需要像其他一些框架那样以“唯一真正的方式”做事。