我喜欢在禁用 JavaScript 的情况下使用 Google。我以前是通过在搜索字符串中添加运算符来实现这一点的gbv=1
,但现在 Google 添加了强制重新加载搜索结果页面的脚本,并将参数更改为gbv=2
,从而启用 JS。
因此,我开始在 Google 上屏蔽脚本(使用扩展程序 uBlock Origin)。不幸的是,这会禁用一个重要功能:我访问的任何链接都只是在结果页面上暂时标记为已访问。如果我重新加载结果页面,或者(更现实的情况)稍后在对略有不同的术语进行新的搜索时遇到一些相同的结果,我已经查看过的结果与我从未见过的结果一样蓝。
这似乎是因为 Google 重定向搜索结果的方式。例如,今天我搜索了“css semicolon”,第二个结果的 URL 显示为
stackoverflow.com/questions/2406717/semicolon-in-css
但实际链接是
https://encrypted.google.com/url?q=http://stackoverflow.com/questions/2406717/semicolon-in-css&sa=U&ved=0ahUKEwiT0siQ567RAhWqj1QKHQWlDz8QFggbMAE&usg=AFQjCNFbK1Fld5AALqyb6B2c6Y0dFzvgIA
每次重新加载结果页面时,查询字符串中字段的内容似乎ved
都会重新生成。可能这就是为什么访问过的链接不再突出显示的原因——因为从技术上讲,我之前没有访问过它们。
许多扩展和用户脚本已经创建了一些工具来解决这个问题,但是我发现所有的工具都是设计用于启用 JavaScript 的(它们中的大多数似乎涉及禁用 onmousedown 事件,而当 JS 被禁用时,该事件不会/不能发生)。
我怎样才能让 Google 显示我已经访问过的链接?
答案1
好吧,我不知道回答你自己的问题是否合适,但是这是我想到的答案:
function revertURL() {
var refs = document.querySelectorAll("h3.r > a");
for (i = 0; i < refs.length; ++i) {
var oldurl = refs[i].href;
var n1 = oldurl.indexOf("q=");
var n2 = oldurl.indexOf("sa=");
var newurl = oldurl.slice(n1 + 2, n2 - 1);
refs[i].href = newurl;
}
}
编辑,四天后:经过测试,我添加了使其真正发挥作用所需的括号(在函数周围和之后)。
我还扩展了定义,refs
以便脚本可以处理更多类型的搜索结果:来自单个域的结果子列表、Google 缓存页面和图像搜索结果。
我添加了一行来解码该函数生成的转义字符。
(function revertURL() {
var refs = document.querySelectorAll("h3.r > a, a.fl, span._cD > a, table.images_table a");
for (i = 0; i < refs.length; ++i) {
var oldurl = refs[i].href;
var n1 = oldurl.indexOf("q=");
var n2 = oldurl.indexOf("sa=");
var newurl = oldurl.slice(n1 + 2, n2 - 1);
var newurl_dec = decodeURIComponent(newurl)
refs[i].href = newurl_dec;
}
})();