Greasy Fork

Greasy Fork is available in English.

BaiduNav - 百度首页优化

百度首页样式调整,删除多余元素,导航优化,专注首页导航页,支持登录、未登录状态,打造整洁好用的百度首页,优化首页体验

当前为 2020-03-15 提交的版本,查看 最新版本

// ==UserScript==
// @name         BaiduNav - 百度首页优化
// @namespace    shangandeyu
// @version      1.0.1
// @description  百度首页样式调整,删除多余元素,导航优化,专注首页导航页,支持登录、未登录状态,打造整洁好用的百度首页,优化首页体验
// @author       shangandeyu
// @license      GPL-3.0
// @run-at       document-end
// @match        https://www.baidu.com/
// @grant        GM_xmlhttpRequest
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        unsafeWindow
// @connect      *
// ==/UserScript==

(function() {
    'use strict';
    var $ = unsafeWindow.jQuery;
    if($("#s_menu_mine").length > 0){
        if($("#s_menu_mine").children('.s-menu-item-underline').length > 0) {
            document.getElementsByTagName("html")[0].style.overflow="auto";
            document.body.style.overflow="auto";

            //             document.getElementById("head").style.minHeight="0px";
            document.getElementById("s_top_wrap").style.overflow="auto";

            document.getElementById("lg").style.height="50px";
            document.getElementById("lg").style.minHeight="50px";

            document.getElementsByClassName("s-skin-container s-isindex-wrap")[0].remove();

            document.getElementById("head_wrapper").style.height="0px";
            document.getElementById("head_wrapper").style.minHeight="0px";

            document.getElementById("s_fm").style.height="0px";
            document.getElementById("s_fm").style.minHeight="0px";

            document.getElementById("s_lg_img").remove();
            document.getElementById("s_lg_img_new").remove();

            document.getElementById("s_icons").remove();
            document.getElementsByClassName("show-vertical")[0].remove();

            let len = document.getElementsByClassName("mnav").length;
            for(let i = 0; i < len; i++){
                let mnav = document.getElementsByClassName("mnav")[0];
                if (mnav != null) {
                    mnav.parentNode.removeChild(mnav);
                }
            }

            document.getElementById("s_wrap").style.marginTop="85px";

            document.getElementsByClassName("s-block-container")[0].style.paddingTop = "12px";
            //     document.getElementsByClassName("s-menu-container")[0].remove();
            document.getElementById("s_menu_gurd").remove();

            document.getElementsByClassName("c-color-text")[0].innerHTML = "";
            $.getJSON("https://api.ooopn.com/ciba/api.php", function(data){
                document.getElementsByClassName("c-color-text")[0].innerHTML = data.ciba;
            });

            let setBar = document.getElementsByClassName("set-bar-content")[0];
            let setMenu = setBar.getElementsByTagName("div")[0];
            setBar.style.width = setMenu.offsetWidth+"px";
            setBar.style.height = setMenu.offsetHeight+"px";
            setMenu.style.display = "none";
            setBar.addEventListener("mouseenter", function(){
                setMenu.style.display = "";
            });
            setMenu.addEventListener("mouseleave", function(){
                setMenu.style.display = "none";
            });

            document.getElementsByName("tj_briicon")[0].remove();
            document.getElementById("s_usersetting_top").style.paddingRight = "4%";

            document.getElementById("s_content_100").setAttribute('data-loaded', '1');
            document.getElementsByClassName("rect")[0].remove();

            document.getElementById("bottom_layer").remove();

            document.getElementsByClassName("p-sidebar js-player-open")[0].remove();
            document.getElementsByClassName("qrcode-layer icon-mask-wrapper")[0].remove();

            var icondiv = document.getElementsByClassName("nav-icon-normal");
            var ids = new Array();
            for(let i = 0; i < icondiv.length; i++) {
                //         if("" == icondiv[i].innerHTML) {
                //             continue;
                //         }
                var url = icondiv[i].parentNode.href;
                var domain = url.split('/');
                var src = "";
                for(let j = 0; j < domain.length && j < 3; j++) {
                    src += domain[j];
                    if(domain[j].indexOf("http") > -1) {
                        src += "//";
                    }
                }
                src += "/favicon.ico";
                if (!GM_getValue(src)) {
                    GM_xmlhttpRequest({
                        method: "GET",
                        url: src,
                        synchronous: true,
                        responseType: "blob",
                        context: {"src": src, "div": icondiv[i]},
                        onload: function (res) {
                            var obj = res.context;
                            var src = obj.src;
                            var div = obj.div;
                            if (res.readyState == 4 && res.status == 200 || res.status == 304) {
                                var reader = new FileReader();
                                reader.readAsDataURL(res.response);
                                reader.onload = function () {
                                    var img = new Image();
                                    img.onload = function() {
                                        GM_setValue(src, reader.result);
                                        //                                         localStorage[src] = reader.result;
                                        div.innerHTML = '<img src="' + reader.result + '" width="32px" height="32px">';
                                        div.className = "nav-icon";
                                    };
                                    img.onerror = function () {
                                        //                                 div.outerHTML = '<div class="nav-icon-normal"></div>';
                                    };
                                    img.src = res.finalUrl;
                                }
                            } else {
                                //                         div.outerHTML = '<div class="nav-icon-normal"></div>';
                            }
                        }
                    });
                } else {
                    //                     icondiv[i].innerHTML = '<img src="' + localStorage[src] + '" width="32px" height="32px">';
                    icondiv[i].innerHTML = '<img src="' + GM_getValue(src) + '" width="32px" height="32px">';
                    icondiv[i].id = src;
                    ids.push(src);
                }
            }
            for(let i = 0; i < ids.length; i++) {
                document.getElementById(ids[i]).className = "nav-icon";
            }
        } else {
            document.getElementsByTagName("html")[0].style.overflow="auto";
            document.body.style.overflow="auto";
//             document.getElementById("head").style.minHeight="0px";

            document.getElementById("lg").style.height="50px";
            document.getElementById("lg").style.minHeight="50px";

            document.getElementsByClassName("s-skin-container s-isindex-wrap")[0].remove();

            document.getElementById("head_wrapper").style.height="0px";
            document.getElementById("head_wrapper").style.minHeight="0px";

            document.getElementById("s_fm").style.height="0px";
            document.getElementById("s_fm").style.minHeight="0px";

            document.getElementById("s_lg_img").remove();
            document.getElementById("s_lg_img_new").remove();

            document.getElementById("s_icons").remove();
            document.getElementsByClassName("show-vertical")[0].remove();

            let len = document.getElementsByClassName("mnav").length;
            for(let i = 0; i < len; i++){
                let mnav = document.getElementsByClassName("mnav")[0];
                if (mnav != null) {
                    mnav.parentNode.removeChild(mnav);
                }
            }

            document.getElementById("s_wrap").style.paddingTop="75px";

            document.getElementsByClassName("s-block-container")[0].style.paddingTop = "12px";
            //     document.getElementsByClassName("s-menu-container")[0].remove();
            document.getElementById("s_menu_gurd").remove();

            document.getElementsByClassName("mine-title")[0].innerHTML = "";
            $.getJSON("https://api.ooopn.com/ciba/api.php", function(data){
                document.getElementsByClassName("mine-title")[0].innerHTML = data.ciba;
            });

            document.getElementsByName("tj_briicon")[0].remove();
            document.getElementById("s_usersetting_top").style.paddingRight = "4%";

            document.getElementsByClassName("s-code-blocks s-block-nav")[0].style.marginTop = "0px";
            document.getElementById("s_content_100").setAttribute('data-loaded', '1');

            document.getElementsByClassName("rect")[0].remove();
            document.getElementsByClassName("s-more-bar")[0].remove();

            document.getElementById("bottom_layer").remove();

            document.getElementsByClassName("p-sidebar js-player-open")[0].remove();
            document.getElementsByClassName("qrcode-layer icon-mask-wrapper")[0].remove();

            var imgs = document.getElementsByClassName("nav-icon");
            for(let i = 0; i < imgs.length; i++) {
                if("https://dss0.bdstatic.com/k4oZeXSm1A5BphGlnYG/icon/6000.png?3" != imgs[i].src) {
                    continue;
                }
                url = imgs[i].parentNode.href;
                //         if("" == url) {
                //             continue;
                //         }
                domain = url.split('/');
                src = "";
                for(let j = 0; j < domain.length && j < 3; j++) {
                    src += domain[j];
                    if(domain[j].indexOf("http") > -1) {
                        src += "//";
                    }
                }
                src += "/favicon.ico";

                if (!localStorage[src]) {
                    GM_xmlhttpRequest({
                        method: "GET",
                        url: src,
                        responseType: "blob",
                        context: i + "|" + src,
                        onload: function (res) {
                            var context = res.context.split("|")
                            var index = context[0];
                            var src = context[1];
                            if (res.readyState == 4 && res.status == 200 || res.status == 304) {
                                var reader = new FileReader();
                                reader.readAsDataURL(res.response);
                                reader.onload = function () {
                                    var img = new Image();
                                    img.onload = function() {
                                        localStorage[src] = reader.result;
                                        imgs[index].src = reader.result;
                                    };
                                    img.onerror = function () {
                                        setDefaultImg(imgs[index], src);
                                    };
                                    img.src = res.finalUrl;
                                }
                            } else {
                                setDefaultImg(imgs[index], src);
                            }
                        },
                        onerror: function(res) {
                            var context = res.context.split("|");
                            var index = context[0];
                            var src = context[1];
                            setDefaultImg(imgs[index], src);
                        },
                        onabort: function(res) {
                            var context = res.context.split("|")
                            var index = context[0];
                            var src = context[1];
                            setDefaultImg(imgs[index], src);
                        }
                    });
                } else {
                    imgs[i].src = localStorage[src];
                }
                //         imgs[i].outerHTML = '<img src="'+ src +'"  class="nav-icon" width="16" height="16" onerror="https://dss0.bdstatic.com/k4oZeXSm1A5BphGlnYG/icon/6000.png?3">';
            }
        }
    } else {
        let len = document.getElementsByClassName("mnav").length;
        for(let i = 0; i < len; i++){
            let mnav = document.getElementsByClassName("mnav")[0];
            if (mnav != null) {
                mnav.parentNode.removeChild(mnav);
            }
        }
        document.getElementsByName("tj_briicon")[0].outerHTML='<a></a>';
        document.getElementById("qrcode").remove();
        if(document.getElementById("ftConw") != null) {
            document.getElementById("ftConw").remove();
        }
        if(document.getElementById("bottom_layer") != null) {
            document.getElementById("bottom_layer").remove();
        }
    }

    function setDefaultImg(imgTag, key) {
        var url = "https://dss0.bdstatic.com/k4oZeXSm1A5BphGlnYG/icon/6000.png?3";
        GM_xmlhttpRequest({
            method: "GET",
            url: url,
            responseType: "blob",
            onload: function (res) {
                if (res.readyState == 4 && res.status == 200 || res.status == 304) {
                    var reader = new FileReader();
                    reader.readAsDataURL(res.response);
                    reader.onload = function () {
                        var img = new Image();
                        img.onload = function() {
                            localStorage[key] = reader.result;
                            imgTag.src = reader.result;
                        };
                        img.onerror = function () {
                            alert(res.finalUrl)
                            imgTag.src = url;
                        };
                        img.src = res.finalUrl;
                    }
                }
            }
        });
    }

})();