New Paper Study主流网站文章阅读优化

对百度百科baidubaike/csdn/知乎zhihu/简书jianshu/360doc/思否segmentfault/搜狐sohu阅读体验进行优化

// ==UserScript==
// @name         New Paper Study主流网站文章阅读优化
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  对百度百科baidubaike/csdn/知乎zhihu/简书jianshu/360doc/思否segmentfault/搜狐sohu阅读体验进行优化
// @author       白水

// @match        https://baike.baidu.com/item/*
// @match        https://www.zhihu.com
// @match        https://www.zhihu.com/*
// @match        https://zhuanlan.zhihu.com/p/*
// @match        https://blog.csdn.net
// @match        https://blog.csdn.net/*
// @match        https://*.blog.csdn.net/*
// @match        https://www.jianshu.com/p/*
// @match        http://www.360doc.com/content/*
// @match        https://segmentfault.com/a/*
// @match        https://www.sohu.com/a/*

// @icon         https://cn.bing.com/favicon.ico

// @grant        none

// @home-url     https://greasyfork.org/zh-CN/scripts/417880
// @require      https://code.jquery.com/jquery-3.5.1.min.js
// @run-at       document-end
// ==/UserScript==

//--------------常用封装--------------------
//写入JQuery 3.5.1
//(function(url) { document.body.appendChild(document.createElement('script')).src = url; })("https://code.jquery.com/jquery-3.5.1.js");
//var $;//不能写入
//写入以下的var,太多方法没啥必要
//(function(textContent) { document.body.appendChild(document.createElement('script')).textContent = textContent; })(usefulVar);
//--------------定义--------------
var host = window.location.host, //host
    href = window.location.href; //href
/** get 指定JS querySelector的对象,返回一个对象
 * @param {*} querySelector JS 选择器
 */
function getByQuerySelector(querySelector) {
    if (!document.querySelector(querySelector)) return false;
    return document.querySelector(querySelector);
}
/** get 指定id属性值的对象,返回一个对象
 * @param {*} Id
 */
function getById(Id) {
    if (!document.getElementsById(Id)) return false;
    return document.getElementsById(Id);
}
/**get 指定TagName的对象 ,返回一个数组
 * @param {*} TagName 指定tag的对象
 */
function getByTagNameArr(TagName) {
    if (!document.getElementsByTagName(TagName)) return false;
    return document.getElementsByTagName(TagName);
}
/** get 指定Name属性的对象,返回一个数组
 * @param {*} Name 指定Name的对象
 */
function getByNameArr(Name) {
    if (!document.getElementsByName(Name)) return false;
    return document.getElementsByName(Name);
}
/** get 指定ClassName的对象,返回一个数组//仅仅缩写
 * @param {*} ClassName 类名称
 */
function getByClassNameArr(ClassName) {
    if (!document.getElementsByClassName(ClassName)) return false; //几乎百分百不会触发
    return document.getElementsByClassName(ClassName);
}
/** get 筛选指定ClassName,利用getByClassNameArr数组返回一个数组
 * @param {*} ClassName 类名称
 */
function getClassUniqueArr(ClassName) {
    var oElements = getByClassNameArr(ClassName),
        boxArr = new Array();
    for (var i = 0, len = oElements.length; i < len; i++) {
        if (oElements[i].className == ClassName) {
            boxArr.push(oElements[i]);
        }
    }
    return boxArr;
}

function QRemove(querySelector) {
    if (!getByQuerySelector(querySelector)) console.log("错误:QRemove不存在;返回值:" + getByQuerySelector(querySelector) + "参数:" + querySelector);
    else getByQuerySelector(querySelector).remove();
}

function CRemove(ClassName) {
    if (getByClassNameArr(ClassName).length == 0) console.log("错误:CRemove不存在;返回值:" + getByClassNameArr(ClassName) + "参数:" + ClassName);
    else if (getByClassNameArr(ClassName).length == 1) getByClassNameArr(ClassName)[0].remove(); //唯一
    else {
        console.log("提示:CRemove不唯一;返回值:" + getByClassNameArr(ClassName) + "参数:" + ClassName);
        ArrRomve(getByClassNameArr(ClassName));
    }
}

function ParentRemoveByCRemove(ClassName) {
    if (getByClassNameArr(ClassName).length == 0) console.log("错误:ParentRemoveByCRemove不唯一;返回值:" + ParentRemoveByCRemove(ClassName) + "参数:" + ClassName);
    else if (getByClassNameArr(ClassName).length == 1) getByClassNameArr(ClassName)[0].remove(); //唯一
    else {
        console.log("提示:ParentRemoveByCRemove不唯一;返回值:" + getByClassNameArr(ClassName) + "参数:" + ClassName);
        ArrRomve(getByClassNameArr(ClassName));
    }
}

/** 倒序遍历删除编辑按钮
 * @param {*} getByArr getBy系列Arr
 */
function ArrRomve(Arr) {
    if (Arr.length == 0) console.log("错误:ArrRomve不存在;返回值:" + ArrRomve(Arr) + "参数:" + Arr);
    else {
        for (var i = Arr.length - 1; i > 0; i--) {
            Arr[i].remove();
        }
    }
}

/* 
Element.prototype.remove = function() {
    //   像那些属性节点,注释节点,文本节点等等根本不可能做父节点,所以可以说parentNode返回的一般都是父元素节点====一直没有判断这个节点是否存在
    //if (!this) return false;
    //if (!this.parentNode) return false;
    this.parentNode.removeChild(this); //父元素节点里删除调用者
};
 */
/* 
HTMLCollection.prototype.remove = function() {
    //   像那些属性节点,注释节点,文本节点等等根本不可能做父节点,所以可以说parentNode返回的一般都是父元素节点====一直没有判断这个节点是否存在
    //if (this) return false; //HTMLCollection [] 必定存在
    if (this.length == 0) return false; //不存在
    //if (!this.parentNode) return false;
    this.parentNode.removeChild(this); //父元素节点里删除调用者
}; 
*/
//--------------Function--------------
//--------------常用封装--------------------


(function() {
    'use strict';
    //文章优化
    function paper() {
        //CSDN
        function csdn() {
            //this指向paper
            CRemove("csdn-side-toolbar"); //右下角引导按钮
            QRemove("#mainBox > aside"); //左边博主信息
            QRemove("#recommend-list-box"); //右边推广
            QRemove("#mainBox > main > div.first-recommend-box.recommend-box"); //底下第一下载推广
            QRemove("#mainBox > main > div.second-recommend-box.recommend-box"); //底下第二下载推广
            QRemove("#mainBox > main > div.blog-footer-bottom"); //脚注???经常删不掉
            QRemove("#passportbox"); //移除登录
        }
        //知乎
        function zhihu() {
            QRemove("#root > div > div.AdblockBanner"); //首页广告拦截
            QRemove("body > div.__web-inspector-hide-shortcut__"); //移除登录
            QRemove("#root > div > main > div > div > div.GlobalSideBar.GlobalSideBar--old > div > div"); //右边创作
            QRemove("#root > div > main > div > div.Question-main > div > div > div.Card.QuestionInvitation"); //问问题
            QRemove("#root > div > main > div > div > div.GlobalSideBar.GlobalSideBar--old > div > div.Sticky.is-fixed > footer"); //脚注
            QRemove("#root > div > main > div > div.Question-main > div.Question-sideColumn.Question-sideColumn--sticky"); //右边博主信息
        }
        //知乎专栏
        function zhihuzhuanlan() {
            QRemove("#root > div > main > div > div.ColumnPageHeader-Wrapper"); //广告拦截
        }
        //简书
        function jianshu() {
            QRemove("#__next > div._3Pnjry"); //左边分享
            QRemove("#__next > div._21bLU4._3kbg6I > div > aside"); //右边推广
            QRemove("#__next > footer"); //下方评论
            QRemove("body > div:nth-child(13)"); //下载推广
        }
        //百度百科
        function baidubaike() {
            mustDelete();

            function mustDelete() {
                getByQuerySelector("body > div.header-wrapper.pc-header-new > div > div").style.height = "0px";
                QRemove("body > div.lemmaWgt-searchHeader > div > div.tool-buttons"); //滚动之后,顶部右上角工具栏
                QRemove("body > div.header-wrapper.pc-header-new > div.topbar.cmn-clearfix"); //顶部百度更多导航内容
                QRemove("#searchForm > a.help"); //顶部帮助
                QRemove("#J-declare-wrap"); //顶部免责声明
                QRemove("body > div.navbar-wrapper"); //头部百科导航都能删除
                CRemove("top-tool "); //右上角贴边删除class一次性去除试试?ok!
                getByQuerySelector("body > div.body-wrapper > div.content-wrapper > div.content").style.width = "850px"; //中间内容
                QRemove("body > div.body-wrapper > div.content-wrapper > div > div.side-content"); //中间侧边内容
                QRemove("#side-share"); //中间右边贴边固定分享
                QRemove("#tashuo_bottom"); //脚部他说
                QRemove("body > div.wgt-footer-main"); //脚部备案
                CRemove('edit-icon'); //删除编辑按钮
            }

            if (getByQuerySelector("body > div.body-wrapper.feature.feature_small.custom > div.secondsknow-large-container.J-secondsknow-large-container")) {
                console.log("推广百科");
                CRemove("edit-lemma"); //编辑
                CRemove("lemma-discussion"); //讨论
                QRemove("body > div.body-wrapper.feature.feature_small.custom > div.secondsknow-large-container.J-secondsknow-large-container"); //推广秒懂,学慧网
                QRemove("#pageTabs"); //中间最上面推广标签
                QRemove("body > div.body-wrapper.feature.feature_small.custom > div.content-wrapper > div > div.main-content > div.main_tab.main_tab-defaultTab.curTab > iframe"); //推广视频,学慧网等等.容易因为这个出bug,删除不掉导致各种问题,
            }

            if (getByQuerySelector("body > div.body-wrapper > div.content-wrapper > div > div.main-content > span")) {
                console.log("科普中国");
                QRemove("body > div.body-wrapper > div.before-content"); //秒懂_科普
                QRemove("body > div.body-wrapper > div.before-content > div.J-wgt-seconds-know-container"); //秒懂_科普
                QRemove("body > div.body-wrapper > div.content-wrapper > div > div.main-content > span"); //专家贡献
                QRemove("body > div.body-wrapper > div.content-wrapper > div.content > div.main-content > span.posterFlag.expert-icon"); //专家贡献
                QRemove("#hotspotmining_s"); //中间上面推广他说_科普
                QRemove("body > div.body-wrapper > div.content-wrapper > div > div.main-content > div.special-topic"); //秒懂_科普
            }

            if (getByQuerySelector("body > div.body-wrapper > div.before-content > div")) {
                console.log("普通词条");
                CRemove("edit-lemma"); //编辑
                CRemove("lemma-discussion"); //讨论
                QRemove("body > div.body-wrapper > div.content-wrapper > div > div.main-content > dl.lemmaWgt-lemmaTitle.lemmaWgt-lemmaTitle- > dd > a.add-video.cmn-btn-hover-blue.cmn-btn-28.J-add-video-link"); //上传视频
                QRemove("body > div.body-wrapper > div.before-content > div"); //秒懂视频_普通词条
            }
            //getByQuerySelector("body > div.body-wrapper > div.content-wrapper > div > div.side-content > div.side-catalog").empty()//empty导航目录提取
        }
        //360doc
        /**
         * //顶部bar???不知道是否有需求删除
         * //转载???无法删除,原因:动态加载
         * //vip??????360的js无法加载,原因未明
         */
        function doc360() {
            if (document.querySelector("#bgchange")) document.querySelector("#bgchange").style.width = "1000px"; //外部1000px
            if (document.querySelector("#articlecontent > table")) document.querySelector("#articlecontent > table").style.width = "1000px"; //内部1000px

            //CRemove("header"); //顶部bar???;不知道是否有需求删除;是否需要直接使用搜索框
            //QRemove("#zcommondID > span.newbtn_forward"); //转载???无法删除;原因:动态加载;解决方案:1.直接去掉整个工具栏,2.硬要看一下收藏:有待解决
            QRemove("#adarttopgoogle"); //vip广告
            CRemove("floatqrcode"); //左边二维码
            CRemove("a_right"); //右侧返回顶部
            QRemove("#goTop2"); //右下角返回顶部

            //先去除div3一大串东西先
            if (document.querySelector("body > div.doc360article_content > div.a_left >  div:nth-child(3)").style.width == "676px") {
                QRemove("body > div.doc360article_content > div > div:nth-child(3)");
            }
            QRemove("#bgchange > div.bottom_controler"); //bottom_controler
            QRemove("#bgchange > div.prev_next"); //推荐
            QRemove("#divtort"); //与我们联系
            QRemove("body > div.atfixednav"); //浮动顶部
            //异步动态js
            QRemove("#registerOrLoginLayer"); //登录可以复制
        }

        //segmentfault
        function segmentfault() {
            CRemove("functional-area-left sticky-top d-none d-xl-flex"); //左侧分享
            QRemove("#sf-article > div.row > div.col-12.col-xl-auto"); //右侧广告栏
            QRemove("#footer"); //脚注
        }

        //sohu
        function sohu() {
            QRemove("#main-header"); //顶部
            QRemove("#article-container > div.column.left"); //左边
            QRemove("#left-bottom-ad");//左下角广告
            QRemove("#right-side-bar"); //右边
            QRemove("#float-btn"); //右边按钮
            QRemove("#backsohucom > span.backword");
            QRemove("#article-container > div > div > div > div.statement");
            QRemove("#article-container > div > div > div > div.bottom-relate-wrap.clear.type-3");

            //利用遍历删除所有element,只能用倒序????


            //利用.children[i],test complete
            function test01() {
                if (getByQuerySelector("#article-container > div.left.main")) {
                    for (var i = 0, j = 0, len = document.querySelector("#article-container > div.left.main").children.length; i < len; i++) {
                        //Element.hasAttributes()必定有ture/flase,下次一定要把else写完整
                        //if (document.querySelector("#article-container > div").children[j].hasAttributes()) {
                        if (getByQuerySelector("#article-container > div").children[j].attributes[0].value == "content") {
                            j++;
                        } else {
                            getByQuerySelector("#article-container > div").children[j].remove();
                            //改用CSS3选择器:nth-child,测试好像是不能够更改变量
                            //document.querySelector("#article-container > div:nth-child(" + j + ")").remove();
                        }
                        //} else;
                    }
                }
            }

            test02();
            //利用css3:nth.child,test complete
            function test02() {
                if (getByQuerySelector("#article-container > div.left.main")) {
                    for (var i = 0, j = 1, len = document.querySelector("#article-container > div.left.main").children.length; i < len; i++) {
                        //Element.hasAttributes()必定有ture/flase,下次一定要把else写完整
                        //if (document.querySelector("#article-container > div").children[j].hasAttributes()) {
                        if (document.querySelector("#article-container > div > div:nth-child(" + j + ")").attributes[0].value == "content") {
                            j++;
                        } else {
                            //getByQuerySelector("#article-container > div").children[j].remove();
                            //改用CSS3选择器:nth-child,测试好像是不能够更改变量
                            document.querySelector("#article-container > div > div:nth-child(" + j + ")").remove();
                        }
                        //} else;
                    }
                }
            }

        }

        //判断网页host
        switch (host) {
            case "blog.csdn.net":
                csdn();
                break;
            case "www.zhihu.com":
                zhihu();
                break;
            case "zhuanlan.zhihu.com":
                zhihuzhuanlan();
                break;
            case "www.jianshu.com":
                jianshu();
                break;
            case "baike.baidu.com":
                baidubaike();
                break;
            case "www.360doc.com":
                doc360();
                break;
            case "segmentfault.com":
                segmentfault();
                break;
            case "csdnnews.blog.csdn.net":
                csdn();
                break;
            case "www.sohu.com":
                sohu();
                break;
            default:
                console.log(host + "域名不是文章");
        }
    }
    //延时
    //window.onload = function() { setTimeout(paper(), 0); };
    //jQuery预载

    var $ = jQuery.noConflict(true);
    //$(document).ready(paper());
    paper();
    //setTimeout(paper(),10000); //延时一段时间后执行function,只执行一次;
    //setInterval(function,5000);//以time为时间间隔,反复执行function。

})();