我目前正在研究一个小的 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/