Greasy Fork is available in English.
删除百度搜索中的百家号结果
- /* jshint esversion: 6 */
- // ==UserScript==
- // @name remove_baijiahao
- // @icon https://bjhstatic.cdn.bcebos.com/favicon.ico
- // @namespace http://tampermonkey.net/
- // @description 删除百度搜索中的百家号结果
- // @version 1.15
- // @match *://www.baidu.com/*
- // @author Greyh4t
- // @grant GM.xmlHttpRequest
- // @run-at document-end
- // @connect www.baidu.com
- // @license GNU GPLv3
- // ==/UserScript==
- (function () {
- 'use strict';
- let blockList = ["baijiahao.baidu.com"];
- deal_content();
- bind_change();
- function bind_change() {
- let titleEl = document.getElementsByTagName("title")[0];
- let MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
- if (MutationObserver) {
- let MutationObserverConfig = {
- childList: true,
- subtree: true,
- characterData: true
- };
- let observer = new MutationObserver(function (mutations) {
- deal_content();
- });
- observer.observe(titleEl, MutationObserverConfig);
- } else if (titleEl.addEventListener) {
- titleEl.addEventListener("DOMSubtreeModified", function (evt) {
- deal_content();
- }, false);
- }
- }
- function deal_content() {
- let content = $('#content_left');
- let containers = content.find('.c-container.new-pmd');
- for (let i = 0; i < containers.length; i++) {
- let container = containers[i];
- let tpl = container.getAttribute('tpl');
- let top;
- let divs;
- switch (tpl) {
- case "se_com_default":
- case "realtime_weak":
- case "rel-timeline":
- case "wenda_abstract_pc":
- case "news-normal":
- case "rel-head":
- case "news-realtime-weak":
- case "rel-common-head":
- top = $(container);
- divs = [container];
- break;
- case "timeliness_news2":
- top = $(container);
- divs = top.children('div');
- break;
- case "news-realtime":
- top = $(container).children('div').children('div').children('div');
- divs = top.children('div');
- break;
- case "sp_realtime_bigpic5":
- top = $(container).children('div');
- divs = top.children('div');
- break;
- case "short_video_pc":
- top = $(container).children('div.op-short-video-pc').children('div');
- divs = top.children('div');
- break;
- case "short_video":
- top = $(container).children('div').children('div').children('div').children('div.c-row');
- divs = top.children('div');
- break;
- case "bjh_addressing":
- container.remove();
- continue;
- default:
- continue;
- }
- handle_divs(container, top, divs);
- }
- }
- // container 为要移除的最外层容器
- // top 用来判断top是否还有子元素,如果没有,则移除container
- // divs 本次要检查的div列表,应当是top的直接子元素或是container本身
- function handle_divs(container, top, divs) {
- for (let i = 0; i < divs.length; i++) {
- let div = divs[i];
- handle_div(container, top, div);
- }
- }
- function handle_div(container, top, div) {
- let as = $(div).find('a');
- for (let i = 0; i < as.length; i++) {
- let a = as[i];
- if (is_block(a.hostname)) {
- check_remove(container, top, div);
- return;
- }
- if (a.href.indexOf("www.baidu.com/link?url=") > -1) {
- handle_fake_url(container, top, div, a);
- }
- }
- }
- function is_block(hostname) {
- for (let i = 0; i < blockList.length; i++) {
- if (hostname.endsWith(blockList[i])) {
- return true;
- }
- }
- return false;
- }
- function handle_fake_url(container, top, div, a) {
- let tmpURL = a.href.indexOf("eqid") < 0 ? a.href + "&wd=&eqid=" : a.href;
- GM.xmlHttpRequest({
- method: "GET",
- url: tmpURL,
- headers: {
- "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
- "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
- "Host": "www.baidu.com",
- "Accept-Encoding": "gzip, deflate, br",
- "Connection": "keep-alive"
- },
- onload: function (response) {
- let reg = /URL=['|"]([^'|"]+)/;
- if (reg.test(response.responseText)) {
- let realURL = response.responseText.match(reg)[1];
- let o = new URL(realURL);
- if (is_block(o.hostname)) {
- check_remove(container, top, div);
- } else {
- // 还原真实地址
- $(container).find('a[href="' + a.href + '"]').attr('href', realURL);
- }
- }
- }
- });
- }
- function check_remove(container, top, div) {
- div.remove();
- if (top.children('div').length == 0) {
- container.remove();
- }
- }
- })()