gpt4 book ai didi

javascript - 存储来自网站的 greasemonkey 脚本中使用的变量

转载 作者:行者123 更新时间:2023-11-30 17:29:15 28 4
gpt4 key购买 nike

在我访问的某个主页上,我想隐藏我点击的所有链接。我的想法是使用这样的 Greasemonkey 脚本:

var blocklist = JSON.parse(GM_getValue("blocklist"));
var as = document.getElementsByTagName('a');
var alength = as.length;
for(var i=0; i<alength; i++) {
var a = as[i];
if(blocklist.indexOf(a.href) >= 0) {
a.style.display='none';
} else {
a.setAttribute('onclick', 'alert("HELP"); return true;');
}
}

在脚本中我可以调用它,没问题:

blocklist = blocklist.concat('http://someurl');
GM_setValue("blocklist", JSON.stringify(blocklist));

但是在网站本身(阅读它说 alert("HELP"); 的地方)我不能调用这个函数,因为函数和黑名单都不存在。

有没有办法从网站访问该功能? (可能不是?)我还能在哪里存储这些值,以便在网站的下一次加载时恢复它们? firefox 浏览器设置为在关机时清理,因此不能使用 a:visited 或类似的。

最佳答案

  1. 不要尝试从网页调用 GM_ 函数。 (1) 这不是直接可能的,(2) 这是一种安全风险,(3) 几乎从来没有必要。

  2. 切勿在 Greasemonkey 脚本中使用 onclick(或者根本不使用)。一个简单的 alert("HELP"); return true; 可能会工作,但任何更多的东西都会崩溃,而且它无论如何都是糟糕的形式。

  3. 此外,如果您使用 querySelectorAllgetElementsByTagName,您可以微调您处理的链接,例如:document.querySelectorAll ("div .main a.user") -- 这将只获取那些在

    中带有 main 类的 CSS 类 user 的链接。

在这种情况下,使用 addEventListener(或使用 jQuery)来处理链接,这样您的脚本代码将如下所示:

var blocklist = JSON.parse (GM_getValue ("blocklist") );
var targlinks = document.querySelectorAll ('a');
for (var J = targlinks.length - 1; J >= 0; --J) {
var targlink = targlinks[J];

if (blocklist.indexOf (targlink.href) >= 0) {
targlink.style.display = 'none';
} else {
targlink.addEventListener ('click', virginLinkHandler, false);
}
}

function virginLinkHandler (zEvent) {
var newURL = zEvent.target.href;
blocklist = blocklist.concat (newURL);
GM_setValue ("blocklist", JSON.stringify (blocklist) );
}

关于javascript - 存储来自网站的 greasemonkey 脚本中使用的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23528158/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com