- // ==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();
- })();