【问题标题】:What can be the event similar to onpopstate that works across documents?与跨文档工作的 onpopstate 类似的事件是什么?
【发布时间】:2018-04-13 05:29:20
【问题描述】:

来自 Mozilla 文档:

一个 popstate 事件在每次活动时被调度到窗口 SAME 的两个历史条目之间的历史条目变化 文档

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

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

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

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

【问题讨论】:

    标签: javascript browser browser-history popstate


    【解决方案1】:

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

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

    【讨论】:

    • 但是'beforeunload'不会有关于被导航到的页面的任何信息吗?如果我访问了网站上的页面 A、B、C、D 并按下“D”上的返回按钮,则 beforeunload 只会告诉我用户将离开页面 D,并且没有类似“C 将从历史记录中获取”之类的信息。在 popstate 的情况下,它会在 2 个文档状态之间触发,我正在寻找类似的触发“在导航 D 之后和 C 将要加载之前”,所以我知道用户已经使用了一些东西来回顾历史(或向前历史上)
    • 不,当然不是。这取决于您登陆页面上的代码来检查上一页中 LocalStorage 中可能遗留的任何面包屑。您的页面不知道浏览器的去向。
    • 谢谢,你能看看我的问题更详细的编辑吗,现在应该更清楚了。仍然认为我不能使用 beforeunload,因为我想要一些与“历史”对象相关的具体内容。
    • 我告诉你,你想要的具体不存在,但你可以用我向你建议的行为来模仿。
    • 不确定是谁做的,我没有。让我对这两个答案都投赞成票,以便可以以某种方式逆转。
    【解决方案2】:

    你的要求有些奇怪:

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

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

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

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


    总而言之,你想做的是为browser extension 工作,而不是为网络图书馆工作。

    【讨论】:

    • 谢谢,但我认为性能接口在 FF 之外不可用(可能是 IE)。正在寻找使用跨浏览器支持的窗口事件的东西。我已经编辑了整个问题,请看一下。
    • @p_champ MDN 的表格是错误的,Chrome 确实支持 performance.timing.type,只有 Safari 不支持。但是由于您的编辑完全改变了问题,我也完全改变了我的答案,您可能不喜欢它......
    • 好吧,可以说它是一个浏览器扩展而不是一个库,并且对于 chrome/safari/ff 是分开的,你建议我应该使用什么?
    • 我并不是真正的 chrome:// 一方,但我认为我提供给 chrome://History API 的链接将是一个好的开始,因为它可以访问整个浏览器历史记录,并且也有事件。
    猜你喜欢
    • 2019-05-30
    • 2011-02-18
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2011-12-17
    • 2015-01-11
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多