使用浏览器后退按钮保留页面状态以便重新访问

我有一个页面,可以根据用户按下按钮动态加载内容:

${document).ready(function) { $("#myButton").click(function() { $("#dynamicDiv").load("www.example.com"); }); } 

动态内容工作正常,我可以整天抓取页面。 但是,在您按照指向其他页面的链接后,再按浏览器后退按钮返回页面,页面完全重置,就好像没有加载任何动态内容一样。

我发誓以前我看过不同的行为,但也许我疯了。 浏览器不应该保留页面的状态,而不是重新呈现它吗?

编辑:顺便说一句,我正在使用Play! 框架,如果这与此有任何关系。

浏览器在首次收到页面时加载页面。 通过javascript完成的任何DOM修改都不会被保留。

如果你想保留修改,你将不得不做一些额外的工作。 修改DOM后,使用稍后可以解析的标识符更新url哈希并重新创建修改。 无论何时加载页面,您都需要检查是否存在哈希,并根据标识符进行DOM修改。

例如,如果要动态显示用户信息。 每次显示一个时,您都会将url哈希值更改为:“#/ user / john”。 每当页面加载时,您需要检查哈希是否存在( window.location.hash ),解析它,并加载用户信息。

实现浏览器后退function很难。 使用像jquery.history.js这样的插件时会变得更容易。

http://tkyk.github.com/jquery-history-plugin/

epignosisx和Malcolm都是对的。 它也被称为“深层链接”。 我们使用JQuery Address Plugin在最近的Play应用程序中处理这个问题。

http://www.asual.com/jquery/address/

我使用的一种技术是将状态序列化为JSON,将其存储在哈希字符串中,然后在页面导航回来时将其读回。 这已经在IE10 +,Firefox,Chrome中进行了测试。

例:

 // On state change or at least before navigating away from the page, serialize and encode the state // data you want to retain into the hash string window.location.hash = encodeURIComponent(JSON.stringify(myData)); // If navigating away using Javascript, be sure to use window.location.href over window.location.replace window.location.href = '/another-page-url' .... // On page load (eg in an init function), if there is data in the #hash, overwrite initial state data // by decoding and parsing the JSON string if (window.location.hash) { // Read the hash string omitting the # prefix var hashJson = window.location.hash.substring(1); // Restore the deserialized data to memory myData = JSON.parse(decodeURIComponent(hashJson)); }