|
|
发表于 2026-10-2 17:32:51
|
显示全部楼层
在 Chromium 150 内核(以及此前部分预更新版本)中,拖放(Drag and Drop)链接后不再触发 :visited 变色,是因为 Chromium 团队引入并强制上线了 “访问链接数据库分区”(Partition the Visited Link Database) 的安全与隐私保护机制。
💡 为什么会这样?
过去,恶意网站可以通过检测 CSS 的 :visited 状态来“窃听”用户的浏览历史。为了堵住这个漏洞,新版内核规定:只有当你在当前页面“直接点击”该链接时,当前域名(Site A)才会被允许将其标记为已访问。
由于拖放链接、鼠标中键后台打开(部分情况) 或 使用某些手势扩展 被浏览器视为非标准点击行为,或被判定为跨域名的第三方行为,从而无法将状态同步回原网页。并且,由于早期允许关闭该功能的实验性 Flag(如 #partition-visited-link-database)已被 Chromium 团队彻底移除,因此单纯依靠 CSS(如你写的 A:visited 样式)已经无法直接修复拖放不变色的问题。
- // ==UserScript==
- // @name Chrome150+内核链接变色
- // @description 用于修复Chrome 150内核更新后,拖拽链接无法触发 :visited 变色的问题,同时作用于点击变色。
- // @version 1.0
- // @match *://*/*
- // @grant GM_addStyle
- // @run-at document-start
- // ==/UserScript==
- (function() {
- 'use strict';
- // 直接用 JS 把 CSS 样式注入到页面中,不需要 Stylus 了
- const css = `
- A.is-dragged, A.is-dragged *, A:visited, A:visited * {
- color: #8e8e8e !important;
- }
- `;
- const style = document.createElement('style');
- style.textContent = css;
- document.documentElement.appendChild(style);
- // 监听拖拽
- document.addEventListener('dragstart', function(event) {
- const link = event.target.closest('a');
- if (link) { link.classList.add('is-dragged'); }
- }, true);
- })();
复制代码 |
|