CSDN|简书优化

支持手机端和PC端

Устаревшая версия за 06.01.2023. Перейдите к последней версии.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         CSDN|简书优化
// @namespace    http://tampermonkey.net/
// @version      0.4.5
// @description  支持手机端和PC端
// @author       MT-戒酒的李白染
// @include      http*://www.csdn.net/*
// @include      http*://bbs.csdn.net/*
// @include      http*://www.jianshu.com/*
// @include      http*://*blog.csdn.net/*
// @include      http*://download.csdn.net/*
// @grant        GM_addStyle
// @grant        GM_registerMenuCommand
// @grant        GM_unregisterMenuCommand
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_deleteValue
// @grant        GM_listValues
// @grant        unsafeWindow
// @run-at       document-start
// @require	     http://cdn.staticfile.org/jquery/2.1.4/jquery.min.js
// @require      https://greatest.deepsurf.us/scripts/455186-whitesevsutils/code/WhiteSevsUtils.js?version=1135447
// @require      https://greatest.deepsurf.us/scripts/449471-viewer/code/Viewer.js?version=1081056
// ==/UserScript==

(function () {
  "use strict";

  var GM_menus = [
    ["menu_showRedirect", "手机csdn显示Redirect", true],
    ["menu_thistab", "手机csdn新页面打开", true],
  ];

  function change_normal_menu() {
    //修改菜单默认值
    for (let i = 0; i < GM_menus.length; i++) {
      let get_GM_value = GM_getValue(GM_menus[i][0]);
      if (get_GM_value) {
      } else {
        console.log("修改菜单值");
        GM_menus[i][2] = false;
      }
    }
  }

  function register_GM_Menu() {
    //注册油猴菜单
    for (let i = 0; i < GM_menus.length; i++) {
      let current_v = GM_menus[i][0];
      let current_name = GM_menus[i][1];
      let current_status = GM_menus[i][2];
      GM_registerMenuCommand(
        `[${current_status ? "√" : "×"}]${current_name}`,
        function () {
          if (current_status) {
            console.log("关闭");
            GM_deleteValue(current_v);
          } else {
            console.log("开启");
            GM_setValue(current_v, "1");
          }
          window.location.reload();
        }
      );
    }
  }

  function isPhone() {
    /* 判断是否是手机访问 */
    return Boolean(/(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent));
  }

  function isCSDN() {
    return Boolean(/csdn.net/i.test(window.location.href));
  }

  function isJianShu() {
    return Boolean(/jianshu.com/i.test(window.location.href));
  }
  change_normal_menu();
  register_GM_Menu();

  if (!isPhone()) {
    //电脑
    console.log("电脑访问");
    GM_addStyle(`
            .ecommend-item-box.recommend-recommend-box,
            .login-mark,
            .opt-box.text-center,
            .leftPop,
            #csdn-shop-window,
            #passportbox,
            .passport-login-container,
            .toolbar-advert,
            .hide-article-box{
                display: none !important;
            }
            .comment-list-box{
                max-height: none !important;
            }
            .blog_container_aside,
            #nav{
                margin-left: -45px;
            }
            .recommend-right.align-items-stretch.clearfix,.dl_right_fixed{
                margin-left: 45px;
            }
            #content_views pre code{
                user-select: text !important;
            }
            #article_content{
              height: auto !important;
              overflow: auto !important;
            }
        `);
    $(document).ready(function () {
      unsafeWindow.articleType = 0;
      Utils.waitForDOM(".hljs-button.signin").then((dom) => {
        if (dom.length) {
          $(".hljs-button.signin").attr("data-title", "复制");
          $(".hljs-button.signin").on("click", function () {
            const copyBtn = $(this);
            const copyArea = $(this).parent();
            copyBtn.attr("data-title", "复制成功");
            const btnParentElement = Utils.findParentDOM(this, (dom) => {
              return dom.className == "prettyprint" ? true : false;
            });
            if (btnParentElement) {
              $(btnParentElement).bind({
                mouseenter: function (e) {
                  copyBtn.attr("data-title", "复制");
                  $(btnParentElement).unbind("mouseenter").unbind("mouseleave");
                },
                mouseleave: function (e) {
                  copyBtn.attr("data-title", "复制");
                  $(btnParentElement).unbind("mouseenter").unbind("mouseleave");
                },
              });
            }
            Utils.setClip(copyArea.text());
          });
        }
      });
      $(".recommend-item-box[data-url*='https://download.csdn.net/']").each(
        (index, item) => {
          $(item).find(".content-box").css("border", "2px solid red");
        }
      );
    });
  } else {
    //手机
    if (isCSDN()) {
      GM_addStyle(`
            #mainBox {
                width: auto;
            }
            #operate,.feed-Sign-span,
            .view_comment_box,
            .weixin-shadowbox.wap-shadowbox,
            .feed-Sign-span{
                display:none !important;
            }
            .GM-csdn-dl{
                padding: .24rem .32rem;
                width: 100%;
                justify-content: space-between;
                -webkit-box-pack: justify;
                border-bottom: 1px solid #F5F6F7!important;

            }
            .GM-csdn-title{
                font-size: .3rem;
                color: #222226;
                letter-spacing: 0;
                line-height: .44rem;
                font-weight: 600;
                //max-height: .88rem;
                word-break: break-all;
                overflow: hidden;
                display: -webkit-box;
                -webkit-box-orient: vertical;
                -webkit-line-clamp: 2
            }
            .GM-csdn-title a{
                word-break: break-all;
                color: #222226;
                font-weight: 600;
            }
            .GM-csdn-title em,.GM-csdn-content em{
                font-style: normal;
                color: #fc5531
            }
            .GM-csdn-content{
                //max-width: 5.58rem;
                overflow: hidden;
                text-overflow: ellipsis;
                display: -webkit-box;
                -webkit-line-clamp: 1;
                -webkit-box-orient: vertical;
                color: #555666;
                font-size: .24rem;
                line-height: .34rem;
                max-height: .34rem;
                word-break: break-all;
                -webkit-box-flex: 1;
                -ms-flex: 1;
                flex: 1;
                margin-top: .16rem;
            }
            .GM-csdn-img img{
                width: 2.18rem;
                height: 1.58rem;
                //margin-left: .16rem
            }
            .GM-csdn-Redirect{
                color: #fff;
                background-color: #f90707;
                font-family: sans-serif;
                margin: auto 2px;
                border: 1px solid #ccc;
                border-radius: 4px;
                padding: 0px 3px;
                font-size: xx-small;
                display: inline;
                white-space: nowrap;
            }
            .component-box .praise {
                background: #ff5722;
                border-radius: 5px;
                padding: 0px 8px;
                height: auto;
                    
            }
            .component-box .praise,.component-box .share {
                color: #fff;
            }
            .component-box a {
                display: inline-block;
                font-size:xx-small;
            }
            .component-box {
                display: inline;
                margin: 0;
                position: relative;
                white-space:nowrap;
            }
            .csdn-edu-title{
                background: #4d6de1;
                border-radius: 5px;
                padding: 0px 8px;
                height: auto;
                color: #fff !important;
            }
            #comment{
                max-height: none !important;
            }
            .comment_read_more_box,
            #content_views pre.set-code-hide .hide-preCode-box,
            .passport-login-container,
            .hljs-button[data-title='登录后复制']
            {
                display:none !important;
            }
            #content_views pre,
            #content_views pre code{
                webkit-touch-callout: text !important;
                -webkit-user-select: text !important;
                -khtml-user-select: text !important;
                -moz-user-select: text !important;
                -ms-user-select: text !important;
                user-select: text !important;
            }
            #content_views pre.set-code-hide{
                height: 100% !important;
                overflow-y: auto !important;
            }
            `);
      function replace_all_commend() {
        //替换所有的推荐
        var commend_list = $(".container-fluid");
        for (var coml = 0; coml < commend_list.length; coml++) {
          let current_commend_className =
            commend_list[coml].getAttribute("class");
          let current_commend_url = "";
          let current_commend_title = "";
          let current_commend_content = "";
          let current_commend_img = "";
          if (commend_list[coml].getAttribute("data-url")) {
            //有data-url 就有recommend_title
            /* console.log("有 data-url"); */
            current_commend_url = commend_list[coml].getAttribute("data-url");
            current_commend_title = $(commend_list[coml])
              .find(".recommend_title")
              .html();
            current_commend_content = $(commend_list[coml])
              .find(".text")
              .html();
            // current_commend_title = commend_list[coml].getElementsByClassName("recommend_title")[0].innerHTML;
            // current_commend_content = commend_list[coml].getElementsByClassName("text active")[0].innerHTML;
            let current_commend_img_dom = $(commend_list[coml]).find(
              ".recommend-img"
            );
            if (current_commend_img_dom.length) {
              for (
                var imgs = 0;
                imgs < current_commend_img_dom.length;
                imgs++
              ) {
                current_commend_img =
                  current_commend_img + current_commend_img_dom[imgs].innerHTML;
              }
            }
          } else {
            /* console.log("没有data-url"); */
            current_commend_url =
              commend_list[coml].getElementsByTagName("a")[0].href;
            current_commend_title =
              commend_list[coml].getElementsByTagName("a")[0].innerHTML;
            current_commend_content =
              commend_list[coml].getElementsByClassName("text")[0].innerHTML;
            current_commend_img = "";
          }
          /* console.log("真实url:", current_commend_url); */
          if (GM_menus[0][2]) {
            current_commend_title =
              current_commend_title +
              `<div class="GM-csdn-Redirect">Redirect</div>`;
          }
          if (
            current_commend_url.match(
              /http(s|):\/\/(download.csdn.net|www.iteye.com\/resource)/g
            )
          ) {
            console.log("该链接为csdn资源下载,标识");
            current_commend_title =
              current_commend_title +
              `<div class="component-box"><a class="praise" href="javascript:;">CSDN下载</a></div>`;
          } else if (current_commend_url.match(/edu.csdn.net/g)) {
            console.log("该链接为csdn学院下载,标识");
            current_commend_title =
              current_commend_title +
              `<div class="component-box"><a class="csdn-edu-title" href="javascript:;">CSDN学院</a></div>`;
          }
          commend_list[coml].className = "GM-csdn-dl";
          commend_list[coml].setAttribute("data-url", current_commend_url);
          commend_list[coml].innerHTML =
            `<div class="GM-csdn-title">` +
            current_commend_title +
            "</div>" +
            `<div class="GM-csdn-content">` +
            current_commend_content +
            "</div>" +
            `<div class="GM-csdn-img">` +
            current_commend_img +
            "</div>";
          $("#recommend")
            .find(".recommend_list")
            .before($("#first_recommend_list").find("dl").parent().html());
          $("#first_recommend_list")?.remove();
        }
      }

      function new_commend_event() {
        //新的推荐跳转事件
        $(".GM-csdn-dl").bind("click", function (e) {
          let current_click_url = e.currentTarget.dataset.url;
          if (GM_menus[1][2]) {
            window.open(current_click_url);
          } else {
            window.location.href = current_click_url;
          }
        });
      }

      function auto_review() {
        //自动展开
        $(".article_content")?.removeAttr("style");
        $(".readall_box")?.show();
        $(".readall_box")?.addClass("readall_box_nobg");
        $(".readall_box")?.hide();
        $(".readall_box")?.addClass("readall_box_nobg");
        $(".detail-open-app-isshow")?.css("display", "block");
        $(".isshow-mask-lock-box")?.show();
      }
      function removeElement() {
        /* 移除一些元素 */
        $(".passport-login-container")?.remove();
      }

      $(document).ready(function () {
        console.log("mobile csdn");
        var csdn_interval_runum = 0;
        var csdn_interval = setInterval(function () {
          csdn_interval_runum = csdn_interval_runum + 1;
          console.log("展开");
          if (csdn_interval_runum <= 5) {
            auto_review();
            removeElement();
          } else {
            clearInterval(csdn_interval);
          }
        }, 200);
        var loding_comment_dom_num = 0;
        var loding_comment_dom = setInterval(function () {
          loding_comment_dom_num = loding_comment_dom_num + 1;
          if (loding_comment_dom_num <= 5) {
            try {
              replace_all_commend();
            } catch (err) {
              console.log("替换底部链接失败", err);
            }
          } else {
            clearInterval(loding_comment_dom);
            new_commend_event();
          }
        }, 500);
      });
    } else if (isJianShu()) {
      console.log("简书");
      GM_addStyle(`
            .download-app-guidance,
            .call-app-btn,
            .collapse-tips,
            .note-graceful-button,
            .app-open,
            .header-wrap,
            .recommend-wrap.recommend-ad,
            .call-app-Ad-bottom,
            #recommended-notes p.top-title span.more,
            #homepage .modal,
            button.index_call-app-btn,
            span.note__flow__download,
            .download-guide,
            #footer,
            .comment-open-app-btn-wrap{
                display:none !important;
            }
            body.reader-day-mode.normal-size {
                overflow: auto !important;
            }
            .collapse-free-content{
                height:auto !important;
            }
            .copyright{
                color:#000 !important;
            }
            #note-show .content .show-content-free .collapse-free-content:after{
                background-image:none !important;
            }
            `);
      Utils.waitForDOM('div#homepage div[class*="dialog-"]').then((dom) => {
        if (dom.length) {
          dom[0].style["visibility"] = "hidden";
        }
      });
      Utils.mutationObserver('div#homepage div[class*="dialog-"]', {
        fn: (mutations) => {
          if (mutations.length == 0) {
            return;
          }
          if (mutations[0].target.style["display"] != "none") {
            document
              .querySelector('div#homepage div[class*="dialog-"] .cancel')
              ?.click();
          }
        },
        config: {
          /* 子节点的变动(新增、删除或者更改) */
          childList: false,
          /* 属性的变动 */
          attributes: true,
          /* 节点内容或节点文本的变动 */
          characterData: true,
          /* 是否将观察器应用于该节点的所有后代节点 */
          subtree: true,
        },
      });
    }
  }
})();