有一些不同的jQuery历史插件有一个比其他任何更好...
我正在尝试决定使用哪一个,任何想法或其他任何尝试:
我试图找出当用户使用后退/前进浏览器按钮导航时如何使我的React SPA应用程序保持状态.例如,用户正在填写表格,然后他前后移动并自动恢复表格.
我回顾了很多JavaScript路由器,但似乎没有一个正确解决这个问题......(甚至根本没有).
目前我正在使用React Router 4,这是我采用的模式:
history.replace(this.state); 然后我移出页面history.push(newLocation)componentWillMount)我检查this.props.location.state !== undefined,如果是,我恢复它this.setState(this.props.location.state)我的问题是:上述模式是否正确?建议?有没有更好的和广泛采用的方式?
我有一个ASP.Net页面,其中包含一个按钮.此页面包含ServerSide Paypal按钮.
推送时,我的服务器在后端执行各种聪明的操作,然后将响应重写为表单和一些将此表单发布到paypal的javascript.
一切都很好.
但是,如果用户然后选择点击返回,他们将到达我生成的自我发布表单,并将其再次转发给Paypal.
我想如果我能找到一种方法让我生成的表单页面不存在于历史中,那么这将解决我的问题.但我不知道如何纠正这个问题.
如何从历史记录中删除我的页面,或者只是让它永远不会出现?
更新:感谢所有......这些是一些很好的答案.赞成所有好的,但由于巧妙地使用隐藏字段而不是cookie作为决策依据而使用splattne.
我有一个ASP.Net Web表单,其中包含文本框字段和隐藏字段.使用客户端JavaScript动态修改隐藏字段值.发布表单,检查值并重定向到另一个页面都按预期工作.
但是,当我使用浏览器后退按钮显示上一页时,我希望看到所有表单字段仍然填充了已发布的值.
在IE和Firefox中,文本和隐藏输入字段都是这种情况.
在Chrome中,这仅适用于文本字段.隐藏字段的值丢失.
在导航浏览器历史记录时,Chrome是否真的会重新填充动态设置隐藏的表单字段值?
我已经将一个小样本放在一起以证明问题,如果需要可以提供.我想先问问题,看看这是否是众所周知的行为,我必须接受.
我正在使用history.js来处理后退按钮.在history.js中,只要我执行pushstate,statechange就会触发.为什么?
我有一个页面,可以根据用户按下按钮动态加载内容:
${document).ready(function)
{
$("#myButton").click(function()
{
$("#dynamicDiv").load("www.example.com");
});
}
Run Code Online (Sandbox Code Playgroud)
动态内容工作正常,我可以整天抓取页面.但是,在您按照指向另一个页面的链接后,再按浏览器后退按钮返回页面,页面完全重置,就像没有加载任何动态内容一样.
我发誓我以前见过不同的行为,但也许我疯了.浏览器不应该保留页面的状态,而不是重新呈现它吗?
编辑:顺便说一下,我正在使用Play!框架,如果这与此有任何关系.
我正在使用jQuery BBQ插件来跟踪用户在页面中的进度.但是,我只想在用户的历史记录中创建一个额外的条目,而不是每个哈希变化都创建一个条目.
我已经尝试了jQuery.bbq.pushState和merge_mode方法,没有成功:仍然添加了新的历史记录条目:
jQuery.bbq.pushState({ sort: encodeURIComponent(sort) });
Run Code Online (Sandbox Code Playgroud)
我也尝试过location.replace(),但这对Safari 5.1.2不起作用.
location.replace('#' + encodeURIComponent(sort))
Run Code Online (Sandbox Code Playgroud)
什么是修改哈希的跨浏览器解决方案,而不会在历史记录中添加太多条目?
我正在使用历史API将新URL推送到网页而不重新加载它.我有多个按钮,都有不同的功能.
我的脚本现在几乎没有问题.当我按下按钮时会发生一些事情,当我返回时,脚本会触发事件监听器而不重新加载页面.
但是,当我现在按下前进按钮时,我想继续前进.URL已正确更改为下一个,但事件侦听器仍然会像按下后退按钮一样触发
例:
index1.htmlindex2.htmlindex3.htmlindex2.htmlindex3.html,但内容是index1.html我想这是因为我有一个监听器,它会监听popstate后退按钮和按下前进按钮的情况.如何区分按下哪种按钮?
这是绑定侦听器的部分:
if (window.history && window.history.pushState) {
$(window).unbind('popstate');
$(window).bind('popstate', function (e) {
clearOverlays();
var url = URL
$.ajax ( {
url : url
}).done ( function ( data ) {
console.log(data);
});
});
}
Run Code Online (Sandbox Code Playgroud) 我们可以使用Javascript获取我的网站的浏览器历史记录吗?
我可以看到一些旧帖子和帖子谈论这些......但这些方法对我不起作用.
是否可能以及如何?
具体来说,调用以下代码片段:
history.replaceState(undefined, undefined, "#" + value)
Run Code Online (Sandbox Code Playgroud)
将正确地不影响当前页面的后退按钮行为,但会在"浏览历史记录"页面中添加一个我不想要的条目.下图是Chrome的历史记录页面,但这也发生在Firefox中.
有没有办法在不添加用户浏览历史记录的条目的情况下替换当前URL?
我正在询问独立的"浏览器历史记录"页面,而不是"后退"按钮使用的实际页面导航历史记录.

browser-history ×10
javascript ×7
jquery ×3
browser ×2
ajax ×1
asp.net ×1
back-button ×1
history.js ×1
html ×1
html5 ×1
jquery-bbq ×1
pushstate ×1
reactjs ×1
router ×1