0

来自 Mozilla 文档:

每次活动历史条目在SAME DOCUMENT的两个历史条目之间发生变化时,都会向窗口发送一个popstate事件。

如果我需要在浏览上下文中收听跨文档的“会话历史记录更改”,我应该使用哪个窗口事件?

我正在编写一个 js 库,当用户使用后退/前进浏览器按钮时,它有助于跟踪导航。当用户从页面 B 导航到页面 A(向后)或页面 A 到页面 B(向前)时,库将记录。我已经使用“popstate”事件实现了对使用哈希的页面的跟踪,但是当用户从页面 A 导航到页面 B 时,此事件不起作用。

我已经查看了 pageshow/pagehide 事件,但它们也会在简单的页面加载时触发,而不仅仅是在“会话历史记录”更改时(即从历史记录中获取页面)。

我应该看什么才能知道“浏览器已查看会话历史记录以获取当前页面”?

4

2 回答 2

0

您的要求中有一些奇怪的东西:

你说你正在编写一个 js 库,但是为了让这个库能够跨不同的文档工作,首先,它至少必须在用户导航的每个文档上执行。

即使是这样,也不会有任何可靠的方法来做你想做的事。

浏览器关于历史导航的行为变化很大:

例如,FF 会将其当前状态保存在内存中,并且不会重新加载页面本身,而只是重新激活其保存的状态(即您甚至无法知道用户回到了该页面(除了丑陋的的轮询performance.navigation.type,尽管 MDN 所说的仅在 Safari 中不存在)。


所以总而言之,你想做的是一个浏览器扩展的工作,而不是一个网络图书馆。

于 2018-04-13T07:52:51.737 回答
0

您将不得不处理 Window 的beforeunload事件,并将代码放在适合您的用例的任何页面加载事件上。

请注意,对于beforeunload,您没有时间在服务器端编写一些东西。您必须在 LocalStorage 中跟踪它。

于 2018-04-13T05:32:56.323 回答