在我访问的某个主页上,我想要隐藏我点击的所有链接。我的想法是使用像这样的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浏览器设置为在关机时进行清理,因此无法使用:访问过的或类似的。
答案 0 :(得分:1)
您应该使用localStorage,以便在后续页面加载时保留列表。它与GM_setValue真的没什么不同。
localStorage.setItem("blocklist", JSON.stringify(blocklist));
var blocklist = JSON.parse(localStorage.getItem("blocklist"));
答案 1 :(得分:1)
请勿尝试从网页调用GM_
个功能。 (1)这不是直接可能的,(2)这是一种安全风险,(3)几乎从来没有必要。
永远不要在Greasemonkey脚本中使用onclick
(或者根本不使用)。一个简单的alert("HELP"); return true;
可能会起作用,但无论如何,任何其他内容都会崩溃,而且形式也很糟糕。
此外,如果您使用querySelectorAll
与getElementsByTagName
,您可以微调您处理的链接,EG:document.querySelectorAll ("div.main a.user")
- 这只会获得与位于&lt; div&gt;内的CSS类user
与班级main
。
在这种情况下,使用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) );
}