保持动态改变HTML上后退按钮(Preserve dynamically changed HTML

2019-09-02 04:32发布

这是惊人的,我经常看到其他网站,但从来没有在我工作的网站这方面的工作。

我带来新的内容与阿贾克斯,我知道history.js和历史API,我不想更改URL,只是浏览器缓存中新的HTML内容,以便当用户离开页面,回来使用后退按钮,它仍然有更新的HTML。

我看到这所有的工作时间在其他网站没有网址变更或使用散列#。
有没有窍门,以得到它的工作,或者它随机浏览器决定?
如果我不希望使用URL有这个信息,有一个简单的方法吗?

Answer 1:

大约十年,现在的一半,我一直在用,我曾经痛苦的反复试验发现两个技巧:输入字段值 - 特别是“隐藏”的 - 在浏览器中的历史与URL一起保存 - 和 - onLoad事件由后(或转发)按钮返回页面时被调用。

这意味着您可以存储多达“状态”,只要你喜欢 - 在隐藏字段(记得把它们放在一个表格),然后“重做”上“的onLoad”的变化。 我通常做“渲染”的一部分单独的函数......换句话说,在该动态性发生的时候,我第一次写信给隐藏字段 - 然后调用渲染功能。 然后,我聚集在一起的所有各种渲染功能动态性的各个位和在onLoad调用它们。

我要强调,我从来没有去任何手册打猎这一点 - 因此无法提供任何保证 - 但我一直在使用它了可靠了好一会儿(因为网景!!!),它与“多”的浏览器(所有的IE ,铬,FF - 但至于其他人,我从来没有尝试过)。

如果任何人有更多的“正确” - 少乏味 - 的方式,我来说,我会很高兴听到这个消息。 但是,这似乎这样的伎俩。



Answer 2:

RES的作者在这里,找到你的问题在/ R / JavaScript的

显然,最近Firefox的附加功能来做到这一点对自己,但没有“好”的方式做到这一点时,浏览器不会为你做。

什么RES用来做的就是添加一个#页= N标记,其中n是你的页码。 这样一来,在页面加载,RES知道你一定是来自于后退按钮,如果已经有一个的location.hash - 不幸的是,这种特殊的行为borked了CTRL-F发现Firefox和Chrome浏览器查找时引起你滚动到另一个页面(= N + 1),因为hashchange将关闭这惹恼了用户的查找对话框...

所以现在RES做一些丑陋的和不完善的体操猜测你是否不通过后退按钮到达页面。 任何它加载了新的一页的时候,它保存在sessionStorage的这个数字(如本地存储,但本地的标签),并在表示用背扣它触发关闭该页面号码的请求。

但是:最近我在FF和Chrome测试,似乎哈希值发生变化不再“取消” CTRL-F查找对话框,所以我的建议是,你使用它。 一旦页面加载,如果有一个存在散列,加载由该散列确定的相关数据。

你可以,如果你想获得真正的疯狂,存储在localStorage的实际HTML内容,并重新加载它通过后退按钮页面加载以及。 这可能不是做事情的最有效的方法,并几乎肯定会导致与JavaScript代码依赖于DOM,虽然冲突,慎用所以踩!

“最好”的解决方案实际上取决于究竟你的网站是做/该内容的外观/行为等。



Answer 3:

您可以使用History.js这样实现你的目标:

function manageHistory(data){

    var History = window.History;
    if ( !History.enabled ) { return false; }        
    History.replaceState({myData: data}, null);
}

$('select.select').change(function(e) { // I am using select tag here to give an example of an HTML action triggerer

    e.preventDefault(); 

    // get data from your select tag

    manageHistory( data)


});

History.Adapter.bind(window, 'statechange', function() { 
    var State = History.getState();

    // Launch the ajax call and update DOM using State.data.myData
});

据有关Mozilla的网站历史文档中,pushState的第三个参数是:

URL - .......此参数是可选的; 如果没有指定,它的设置文档的当前URL。



Answer 4:

我认为,原因可能是其他网页使用了会话提供一些后端服务器。

如果您正在构建静态HTML / JS页面不存在这样的会话和页面重新加载公正。

您可以使用Cookie来实现你想要的。



Answer 5:

本地存储是一种方式,另一种方式是服务器端的持久性。

当HTML编辑/创建/一些属性是在客户端改变了,你需要通过一个RESTful API(或东西可比)同步与webstorage或数据库页面的状态变化。

当您返回到页面 - 该页面可以检索从本地存储存储信息......如果您正在使用服务器端的持久性,则需要结合使用它的会话cookie来检索用户的状态改变 - 这然后可以从该服务器装载。



Answer 6:

我会建议你使用Cookie。

虽然HTML5提供Webstorage ,它的值可以被存储在浏览器中。 也有一些JS库处理HTML5 Webstorage。

注意:有数据的每个浏览器可以存储的大小之间的差异。 你可以找到更多关于它在这里 。

注2:也有一些问题,黑客攻击用户的磁盘空间,所以你可以期待的是有关使用webstorage将被更新的政策( http://feross.org/fill-disk/ )



文章来源: Preserve dynamically changed HTML on back button