大家是怎么标记已读页面的

21 天前
 chesha1

目前应该只有给 a:visited 附加 css 样式这一个好办法,我试了 chrome 拓展 Stylus这个油猴脚本,都能部分解决问题

但是这两个工具很依赖网站的原链接不变,比如说在本站,一个链接内容有更新之后,url 尾巴留下的记录也会变化,比如从

https://tanronggui.xyz/t/123456#reply10

变成

https://tanronggui.xyz/t/123456#reply11

就无法被 visited 记录了,大家有什么好的解决方法吗

1816 次点击
所在节点    程序员
4 条回复
StevenRCE0
21 天前
这个油猴插件代码很简洁,在这里面自定义匹配逻辑应该就可以了:

```javascript
function updateLinkStatus(link) {
if (visitedLinks.has(link.href)) {
link.style.color = '#88C6E5';
} else {
link.addEventListener('click', () => {
visitedLinks.add(link.href);
GM_setValue('visitedLinks', Array.from(visitedLinks));
link.style.color = '#88C6E5';
});
}
}
```
NoOneNoBody
21 天前
不是“只有”,方法很多的,只不过你说的这个比较简单,基于浏览器自身的 history 数据库

如果自己写脚本需要处理好获取 visited 的问题,就是需要一个历史库才能比较
至于你说的同一页 url 不同,用正则处理一下就行了

更复杂还有
https://example.com/?abc=1&xyz=2...
https://example.com/?xyz=2&abc=1...
这些参数都一样,是同一页,但 url 不同

就是看你的需求怎样,越复杂越难写,例如我的需求是跨浏览器的访问记录,就需要自建数据库了
zzznow
21 天前
function updateLinkStatus(link) {
// 获取链接的 href 属性,并移除#及其后面的内容
const cleanHref = link.href.split('#')[0];

if (visitedLinks.has(cleanHref)) {
link.style.color = '#88C6E5';
} else {
link.addEventListener('click', () => {
visitedLinks.add(cleanHref);
GM_setValue('visitedLinks', Array.from(visitedLinks));
link.style.color = '#88C6E5';
});
}
}
函数替换一下就 ok...
importmeta
21 天前
让 AI 写油猴脚本, 取 123456 这一部分存到本地存储里, LocalStorage 或者 IndexedDB, 进来油猴脚本判断 URL 是否是包含这部分, 包含就加点样式.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1104482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX