0

我目前正在开发一个小型Google Chrome 扩展程序,以像以前一样在网格上显示 YouTube 订阅页面

我可以毫无问题地调整 CSS 以使其看起来接近前一个,但我遇到了其他问题:我正在尝试找到一种方法来隐藏用户已经看过的视频。

访问过的视频和未访问过的视频之间的 CSS 或 HTML 层次结构似乎完全没有区别,所以我想我一直在努力寻找使用该:visited属性的方法。

但是:浏览器只允许更改属性的颜色/边框颜色/背景颜色:visited,jQuery 不能过滤/选择:visited属性。

有没有人知道解决这个问题的方法?

4

2 回答 2

2

编辑

当我阅读第一段时,这些问题实际上是关于Google Chrome 扩展程序并且没有为此标记的,我回答了使用 jQuery 的请求。以下是有关如何使用chrome.historyAPI 访问 Google Chrome 扩展程序中已访问页面的更多信息。

谷歌 chrome.history API

如果用户授予权限,您可以在 Google Chrome 扩展程序中访问所有访问过的链接。您必须在扩展清单中包含此代码:

"permissions": [
    "history"
],

这将导致安装期间出现权限警告,通知用户您的扩展程序可能想要访问的信息。

最后,您现在可以使用search- 方法来请求访问的页面。text如果对象的属性query为空,您甚至可以请求所有页面:

chrome.history.search(object query, function callback)

这将产生一个数组historyItems,其中包含每个页面的大量信息,例如 URL、页面标题、上次访问时间……</p>

JavaScript

不幸的是,使用 CSS 和 JavaScript 的组合无法选择用户访问过的链接。这是由于隐私设置。它甚至写在CSS2 规范“5.11.2 The link pseudo-classes: :link and :visited”中

因此,UA 可以将所有链接视为未访问的链接,或实施其他措施来保护用户的隐私,同时以不同的方式呈现已访问和未访问的链接。

您可以在此处阅读更多相关信息:“堵塞 CSS 历史记录泄漏”。

您的问题的可能解决方法可能是:

  • 将用户单击的链接存储在本地存储中或
  • 通过将链接存储在用户会话中的脚本重定向每个链接,或者
  • 使用 AJAX 提交新点击的链接,并将值存储在会话中
于 2013-08-16T14:59:00.297 回答
0

您可能无法直接选择 :visited 伪类,但您应该能够检查该伪类设置的属性是否存在,前提是 :visited 至少有一个区别。

比如说 :visited 伪类将背景设置为红色,你应该能够像这样检查

if ($(element).css('background', 'red')){
    // do something
}

所以我想在你的情况下,不同的css属性可能是

display:none;

所以你应该能够对照

display:block;

或类似的规定。

于 2013-08-16T14:34:41.283 回答