【问题标题】:Javascript concept using history object使用历史对象的 Javascript 概念
【发布时间】:2012-11-27 02:57:50
【问题描述】:

我有兴趣制作一个网站,当他们访问时,它会闪现访问者的整个网络历史。我计划使用 JavaScript 来获取每个查看者计算机上的历史记录,并根据他们拥有的数量以不同的速度对其进行动画处理。我的想法是使用history.length 来确定访问者历史的长度,然后使用history.go() 在整个网络历史中导航-1、-2、-3 等。我认识到加载时间会很长,但现在我只是想通过这个概念来思考。 This 相关问题似乎是我将用于我的代码基础的内容,但是,我不明白他们为什么描述这种方法不起作用。我是一名对 JavaScript 非常陌生的学生。

你们知道这是否可行,或者对实现我的想法有什么想法吗?

【问题讨论】:

  • 第一个 history.back() 不会杀死你的脚本吗?您可能需要在 iframe 中执行此操作,但我不确定您是否可以使其工作。
  • 是的 - 一旦您调用 history.go(),您的页面及其 JavaScript 将被卸载。我认为也不可能将页面的历史记录加载到 iframe 中……也许您应该尝试浏览器扩展程序?
  • 顺便说一句,这是一个副本:stackoverflow.com/questions/1946963/…

标签: javascript arrays history concept


【解决方案1】:

您可以拨打history.go() 一次。这就是你所能得到的。原因很简单,一旦你进入上一页,你的 javascript 就消失了。 iframe 也不起作用,因为您无法在具有来自另一个域的页面的 iframe 中执行自己的 JS。阅读 same origin policy 了解更多信息。

我能想到的唯一真正的解决方案是浏览器扩展。之所以可行,是因为您的 JS 可以跨多个站点持续存在。您可能只需要在每个页面中执行以下操作的用户脚本:

  • 检查变量以查看该功能是否已启用
  • 如果是,超时后调用history.go(-1)(控制速度)

我对 Chrome 最熟悉,所以我想用一个 browserAction 来启用/禁用脚本和一个 content script 来执行重定向。其他潜在选项包括 Greasemonkey (Firefox)、Tampermonkey (Chrome)、Personalized Web (Chrome) 脚本

【讨论】:

  • 那是因为!我从未使用过浏览器扩展程序。它会相当简单,您是否推荐任何资源来了解更多关于它们的信息?谢谢!
  • 感谢@gengkev - 这是他的主意。请参阅上面的 cmets。
  • 对于 Chrome,developer.chrome.com/extensions/getstarted.html 是一个好的开始。
  • 有人想解释否决票吗?我很乐意详细说明我错过或不清楚的任何内容。
【解决方案2】:

如您链接到的问题中所述,JavaScript 和/或 DOM 不会让您访问整个浏览器历史记录,因为这将严重侵犯隐私。想象一下,访问一个站点并让他们知道您曾经在该浏览器中访问过的每个站点

这可能会让网站访问:

  1. 您仍在其他网站上登录的会话(如果他们将会话密钥存储在 URL 中,就像某些网站那样)
  2. 了解您执行的活动类型(您是站点 X 的版主吗?)
  3. 关于您感兴趣的内容的海量数据。

这不是标准机构或浏览器制造商认为用户有兴趣与所有人分享的内容。这就是为什么没有一个 API 可以遍历浏览器的整个历史。

@sachleen 已经提供了一个非常好的深入回答,说明如果您想构建此应用程序,如何解决单个浏览器的此限制。为了完整起见,我将简单地提及关键术语:“浏览器扩展”。 :-)

【讨论】:

  • 谢谢,我不是故意要成为讨厌的人来转发,我只是想要更多的解释。
  • Chuckles @Brannon - 很高兴我能帮上忙。我想你正在寻找更多的解释 - 因此答案:-)
猜你喜欢
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多