如何管理浏览器“;背面“;以及“;向前“;按钮
How to manage browser "back" and "forward" buttons when creating a javascript widget
我创建了一个Javascript小部件,允许用户在外部网站上嵌入日历。现在我没有以任何方式处理浏览器的后退/前进按钮,这意味着如果他们点击一个事件,它会通过ajax加载,但如果他们点击"后退",他们会被带到上一个网站。
我看到了两种解决方案
1) 跟踪javascript对象中的历史记录,然后尝试检测"后退"answers"前进"的单击
2) 在url散列中跟踪当前状态。(如www.xxx.com/events#timely=my-fantastic-event
)
解决方案2也允许对事件进行书签,尽管我认为这仍然很慢,因为它首先需要加载页面,然后加载事件(我的意思是,它首先加载www.xxx.com/events,然后检测哈希并加载事件)
所以真实的情况。我在www.fantastic-events.com
网站上有我的活动。我使用javcascript小部件在w ww.event-listings.com/events
上嵌入日历。当用户点击事件的详细信息时,我可能会推送我想要的状态(www.event-listings.com/event/my-fantastic-event
),并使用History.js来捕捉steate更改并加载正确的事件,但这会创建一个url,之后该url将不可用。我的意思是,如果用户为www.event-listings.com/event/my-fantastic-event
添加书签并稍后对其进行可视化编辑,它将不起作用,因为我的javascript小部件将不会加载。
有什么建议/考虑吗?
实现目标主要有两种方法
其中之一,就是您提到的散列方法。如果你需要支持旧的浏览器(IE<=9),那就是方法。如果你决定使用这种方法,你的朋友就是hashchange
事件。哈希模式依赖于此事件来触发功能。以其最天真的方式,它看起来像:
window.addEventListener('hashchange', function (e) {
var hash = window.location.hash;
if (hash === 'event-1') {
// ...
}
else if (...) {
// ...
}
});
您的另一个选择是使用History API,特别是pushState
方法和popstate
事件。需要注意的是,pushState
方法不会创建HTTP请求。此外,如果用户更改当前历史记录条目(使用后退/前进按钮),浏览器将不会重新加载,而是会触发一个popstate
事件,您可以收听。如果用户导航到不是使用pushState
或replaceState
创建的历史记录条目,浏览器会按预期加载资源(你不会损害用户的体验——如果她想离开网站,她会成功的)。
请注意,使用hashchange
方法可能会与使用该方法的其他库发生冲突,并且由于大多数流行的框架(ember、angular等)出于浏览器兼容性的原因使用该方法,因此有点风险。
对于您对"不存在页面"问题的担忧-一个可能的解决方案是使用查询参数来表示您的状态,而不是不存在的URL:
window.history.pushState({ event: 'event-id' }, "Event Title", "?event=event-id");
然后,您可以在页面加载时解析查询参数,并使用它们的值将组件初始化为所需状态。
你可以看看这篇很好的MDN文章,以获得更好的参考。
- 历史向前/向后按钮不'不能使用angular 2路由器
- 数据rel=“;背面“;无法在iPhone上工作
- 为什么我的表格在'背面'按钮
- IE11是否有“背面可见性:隐藏”的替代方案
- 如何获取浏览器's”;背面“;按钮以清除d3.js可视化的先前状态
- jquery在邮件背面损坏
- 针对浏览器的不同响应的Backbone.js路由器模式“;背面“;按钮或直接导航
- 钛;推荐的方法“;包括“;向前
- 在给定偏移量大于数组的情况下,在数组上无缝循环,向前或向后循环
- 如何使用JavaScript SDK更改Facebook个人资料图片并按时更改其背面
- 如何在三.js中向前移动对象
- JQuery 移动滑动切换效果是反向的,但不能向前工作
- 如何使另一条线在动态图中向前移动
- 在数组中向前和向后选择 X 个金额,如果需要,循环到开头和结尾
- 是否有相当于三.js的背面可见性
- 在带有视图(路由)的 AngularJS 中,为什么控制器只向前执行
- AJAX 活动在向前和向后浏览时消失
- 如何使用主干在浏览器背面保留页面选择
- 谷歌浏览器“;返回“;以及“;向前“;历史
- 如何管理浏览器“;背面“;以及“;向前“;按钮