// ==UserScript==
// @name 百度搜索结果过滤
// @name:zh 百度搜索结果过滤
// @name:zh-CN 百度搜索结果过滤
// @name:zh-TW 百度搜索结果过滤
// @namespace http://tampermonkey.net/
// @version 0.3
// @connect *
// @description 兼容AC双列baidu脚本,搜索结果增加屏蔽按钮,有可视化列表查看编辑保存,支持通配符* ?
// @description:zh 兼容AC双列baidu脚本,搜索结果增加屏蔽按钮,有可视化列表查看编辑保存,支持通配符* ?
// @description:zh-CN 兼容AC双列baidu脚本,搜索结果增加屏蔽按钮,有可视化列表查看编辑保存,支持通配符* ?
// @description:zh-TW 兼容AC双列baidu脚本,搜索结果增加屏蔽按钮,有可视化列表查看编辑保存,支持通配符* ?
// @author 关公说爱情
// @license MIT
// @match https://*.baidu.com/*
// @require https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js
// @require https://cdn.bootcdn.net/ajax/libs/layer/3.5.1/layer.min.js
// @exclude https://www.baidu.com/img/*
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function() {
'use strict';
const baiduHelper={};
var $ = $ || window.$,
removing = false,
blacklist,
refUrls={};
$(document.body).append(`<link href="https://cdn.bootcdn.net/ajax/libs/layer/3.5.1/theme/default/layer.min.css" rel="stylesheet">`);
function globToRegex (glob) {
var specialChars = "\\^$*+?.()|{}[]";
var regexChars = ["^"];
for (var i = 0; i < glob.length; ++i) {
var c = glob.charAt(i);
switch (c) {
case '?':
regexChars.push(".");
break;
case '*':
regexChars.push(".*");
break;
default:
if (specialChars.indexOf(c) >= 0) {
regexChars.push("\\");
}
regexChars.push(c);
}
}
regexChars.push("$");
return new RegExp(regexChars.join(""));
}
baiduHelper.init = function(){
blacklist = GM_getValue("blacklist");
if(blacklist==undefined)
{
blacklist = [];
}
$('.s_tab_inner').append('<a id="showBlackList" href="javascript:;" class="s-tab-item">屏蔽列表</a>');
$('#showBlackList').on('click', function () {
let listvalue='';
for (let x = 0; x < blacklist.length; x++) {
listvalue += blacklist[x];
if(x<blacklist.length - 1)
{
listvalue += "\n";
}
}
layer.prompt({
title: '域名屏蔽列表,一行一个,支持 * ? 通配符!自动过滤空行',
formType: 2,
area: ['500px', '350px'],
value:listvalue,
yes: function (index, layero) {
let pass = $(document.getElementsByClassName('layui-layer-input')[0]).val();
if(pass.length > 0){
blacklist = pass.split('\n');
}
else{
blacklist = [];
}
blacklist = blacklist.filter(function (s) { return s && s.trim(); });
GM_setValue("blacklist",blacklist);
layer.close(index);
}
});
});
$('body').on('click', '.removeItemButton', function () {
let domain = $(this).attr('data-domain');
layer.confirm('是否将『'+domain+'』加入到屏蔽列表?', {
btn: ['是','否']
}, function(index){
blacklist.push(domain);
GM_setValue("blacklist",blacklist);
baiduHelper.removeItem();
layer.close(index)
});
});
var beforeScrollTop = document.documentElement.scrollTop
window.addEventListener("scroll", function (e) {
var afterScrollTop = document.documentElement.scrollTop,
delta = afterScrollTop - beforeScrollTop;
if (delta === 0) return false;
if (delta > 0) {
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
let scrollDelta = 666;
if (document.documentElement.scrollHeight <= document.documentElement.clientHeight + scrollTop + scrollDelta) {
if(!removing)
{
removing=true;
setTimeout(function() {
baiduHelper.addButton();
baiduHelper.removeItem();
removing=false;
}, 2000);
}
}
}
beforeScrollTop = afterScrollTop;
}, false);
}
baiduHelper.cleanAd = function(){
$('#content_right').remove();
$('#rs_new').remove();
$('#foot').remove();
};
baiduHelper.removeItem = function(){
let $rows = $('#content_left .new-pmd');
$rows.each(function(){
let $row = $(this);
let mu = $row.attr('mu');
let domain='';
if(mu !== undefined )
{
domain = baiduHelper.getUrlDomain(mu);
}else
{
domain = $row.attr('data-domain');
}
for (let x = 0; x < blacklist.length; x++) {
if(globToRegex(blacklist[x]).test(domain))
{
$(this).remove()
break;
}
}
});
};
baiduHelper.getUrlDomain = function(refUrl){
let domain = refUrl.split('/');
if(domain[2])
{
return domain[2];
}
return '';
};
baiduHelper.addButton = function(){
let $rows = $('#content_left .new-pmd');
$rows.each(function(){
let $row = $(this);
let mu = $row.attr('mu');
if(mu !==undefined)
{
let $tools = $row.find('.c-icon').closest(".c-row.c-gap-top-xsmall");
let domain = baiduHelper.getUrlDomain(mu);
$row.attr('data-domain',domain);
if($tools.find('.removeItemButton').length==0)
{
$tools.append('<a style="margin-left: 8px" class="removeItemButton" data-domain="' + domain + '"><span class="c-color-gray" aria-hidden="true">✌屏蔽它✌</span></a>');
}
}
else
{
let $a = $(this).find('a').eq(1);
if($a.length > 0)
{
let href = $a.attr('href');
let refUrl = refUrls[href];
if(refUrl == undefined)
{
if(href.startsWith("http"))
{
let url = href.replace(/^http:/, "https:");
let request = GM_xmlhttpRequest({
url: url,
headers: {"Accept": "*/*", "Referer": url},
method: "GET",
timeout: 5000,
onreadystatechange: function (response) {
if(response.readyState===4)
{
refUrls[href] = response.finalUrl;
let domain = baiduHelper.getUrlDomain(refUrls[href]);
let $tools = $row.find('.c-icon').closest(".c-row.c-gap-top-xsmall");
if($tools.length==0)
{
$tools = $row.find('.c-icon').closest(".g");
}
if($tools.length >0 )
{
$row.attr('data-domain',domain);
if($tools.find('.removeItemButton').length==0)
{
$tools.append('<a style="margin-left: 8px" class="removeItemButton" data-domain="' + domain + '"><span class="c-color-gray" aria-hidden="true">✌屏蔽它✌</span></a>')
}
}
}
},
onerror: function (response) {
}
});
}
}
else
{
}
}
}
});
};
baiduHelper.cleanAd();
baiduHelper.init();
baiduHelper.addButton();
baiduHelper.removeItem();
})();