不点击就自动接受 Cookie 横幅
Cookie 同意横幅是现代网络的收费站。你在每个网站、每一天都交同样的过路费。一小段 JustZix JavaScript 规则可以替你交费——在横幅出现的瞬间点击接受(或拒绝)按钮。
横幅如何工作
大多数同意对话框是注入页面里的一段普通 HTML。它们通常包含一个文本可预测的按钮——"Accept"、"Accept all"、"I agree"、"Got it"——或一个可识别的 id/class。因为 JustZix JS 在页面上下文里运行,你可以找到那个按钮并以程序方式点击它。
最简单的版本:按按钮文本点击
这条规则扫描页面上的每个按钮,并点击第一个标签匹配一个接受短语列表的按钮。它不区分大小写并裁掉空白。
var ACCEPT = ['accept all', 'accept', 'i agree', 'agree', 'got it', 'allow all'];
function clickConsent() {
var buttons = document.querySelectorAll('button, a, [role="button"]');
for (var i = 0; i < buttons.length; i++) {
var label = (buttons[i].textContent || '').trim().toLowerCase();
if (ACCEPT.indexOf(label) !== -1) {
buttons[i].click();
return true;
}
}
return false;
}
clickConsent();
处理延迟加载的横幅
许多同意管理器(页面通过标签管理器运行它们)在加载后一两秒才注入横幅。JustZix 每次页面加载运行一次你的 JS,所以单次调用可能错过延迟的横幅。用一个 MutationObserver 监视新节点并重试,一旦成功就停止。
var ACCEPT = ['accept all', 'accept', 'i agree', 'agree', 'got it', 'allow all'];
function clickConsent() {
var buttons = document.querySelectorAll('button, a, [role="button"]');
for (var i = 0; i < buttons.length; i++) {
var label = (buttons[i].textContent || '').trim().toLowerCase();
if (ACCEPT.indexOf(label) !== -1) { buttons[i].click(); return true; }
}
return false;
}
if (!clickConsent()) {
var observer = new MutationObserver(function () {
if (clickConsent()) observer.disconnect();
});
observer.observe(document.documentElement, { childList: true, subtree: true });
setTimeout(function () { observer.disconnect(); }, 10000);
}
setTimeout 守卫在十秒后断开观察器,所以它永远不会在没有横幅的页面上无限运行。
针对特定的同意平台
如果你只浏览少数几个网站,就按选择器定位确切的按钮——这更快,并避免意外点击。在开发者工具里检查横幅,复制 id 或 class,并直接使用它。
function clickById(selectors) {
for (var i = 0; i < selectors.length; i++) {
var el = document.querySelector(selectors[i]);
if (el) { el.click(); return true; }
}
return false;
}
clickById([
'#onetrust-accept-btn-handler',
'.cookie-consent__accept',
'button[data-testid="accept-all"]'
]);
更想拒绝?
注重隐私的用户可以翻转逻辑——只需替换短语列表。许多横幅现在依法必须有一个"全部拒绝"按钮,所以这在很多网站上都有效。
var REJECT = ['reject all', 'reject', 'decline', 'necessary only', 'only necessary'];
var buttons = document.querySelectorAll('button, a, [role="button"]');
for (var i = 0; i < buttons.length; i++) {
var label = (buttons[i].textContent || '').trim().toLowerCase();
if (REJECT.indexOf(label) !== -1) { buttons[i].click(); break; }
}
良好实践
- 只有当你信任短语列表时才把规则限定到
*——宽泛的文本匹配偶尔可能点击一个无关的按钮。拿不准时,按站点限定。 - 始终用超时断开观察器,这样规则就不会泄漏。
- 这条规则点击的是页面上已经存在的按钮;它不发送数据,不联系任何服务器。
- 如果某个网站把内容藏在横幅后面,点击接受也会恢复滚动——不需要额外的 CSS。
从现成示例获取一份经过测试的副本,或者如果你是全新开始,下载 JustZix。把它与我们关于自动展开隐藏内容的指南搭配,获得更顺畅的阅读。
为这篇文章评分
暂无评分 — 成为第一个。