jquery - 如果 :visited link 则隐藏父级的方法

标签 jquery css google-chrome-extension content-script visited

我目前正在研究一个小的 Google Chrome extension to display the YouTube subscription page like it was before, on a grid .

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

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

但是:浏览器只允许改变 :visited 属性的 color/border-color/background-color,jQuery 不能过滤/选择 :visited 属性。

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

最佳答案

编辑

当我阅读第一段时,问题实际上是关于 Google Chrome Extension 的。它没有被标记,我回答了使用 jQuery 的请求。以下是有关如何使用 chrome.history API 访问 Google Chrome 扩展程序中访问过的页面的更多信息。

谷歌 chrome.history API

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

"permissions": [
    "history"
],

这将导致 Permission warning在安装期间,通知用户您的扩展程序可能想要访问哪些信息。

现在您终于可以使用 search-method 了请求访问过的页面。如果 query 对象的 text 属性为空,您甚至可以请求所有页面:

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

这将导致 historyItems 的数组,它拥有一堆 每个页面的信息,例如 URL、页面标题、上次访问的时间……

JavaScript

遗憾的是,无法通过组合使用 CSS 和 JavaScript 选择用户访问过的链接。这是由于隐私设置。它甚至写在 CSS2 specification "5.11.2 The link pseudo-classes: :link and :visited"

UAs may therefore treat all links as unvisited links, or implement other measures to preserve the user's privacy while rendering visited and unvisited links differently.

您可以在这里阅读更多相关信息:“Plugging the CSS History Leak ”。

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

  • 将用户点击的链接存储在Local Storage中或
  • 通过将链接存储在用户 session 中的脚本重定向每个链接,或者
  • 使用 AJAX 提交新点击的链接,并将值存储在 session 中

关于jquery - 如果 :visited link 则隐藏父级的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18275615/

相关文章:

jquery - 查找元素是否包含 x 但不包含 y (jQuery)

css - 将半径添加到 Gutenberg Columns block 的外边界

html - 使用 CSS 属性 "float"在 HTML 中 float div 时遇到问题?

javascript - window.postMessage 从 web_accessible_resource 到内容脚本

javascript - 从注入(inject)脚本到带有响应的内容脚本的通信

google-chrome - 以编程方式刷新 Chrome 政策?

javascript - 在 Javascript(或 Jquery)中将函数声明为变量

javascript - 从动态创建的选择表单中检索选项

html - 为什么父项的悬停状态不会改变子项的行高,即使是 "!important"?

javascript - 如何使用 JQuery 创建输入建议