// ==UserScript== // @name ⚡️ 掘金 |csdn |知乎 | 独家UI排版 更方便您的阅读📖 去广告🪧 免登录复制 一键复制 去剪贴板劫持 持续更新 外链跳转 宽屏展示 不定期帮忙下载资源 // @namespace https://github.com/wandou-cc/blog-ui // @version 1.3.4 // @description ⚡️ 掘金 |csdn | 知乎 独家UI排版 更方便您的阅读📖 去广告🪧 免登录复制 一键复制 劫持剪贴板 持续更新 |💫全新布局|🫥去掉一些花里胡哨的组件,阅读更加清晰|🐯基本实现显示部分由用户自己定制|🌈直接一键复制 不在需要登录|✨展开所有折叠代码,简化操作|支持移动端PC端通通优化|入口支持拖拽放置 // @author wandou-cc // @include *://*.csdn.net/* // @include *://*juejin.cn/* // @include *://*zhihu.com/* // @resource css https://cdn.jsdelivr.net/gh/wandou-cc/blog-ui@20230912_v1/index.css // @require https://unpkg.com/better-scroll@latest/dist/better-scroll.min.js // @icon data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAUDc8RjwyUEZBRlpVUF94yIJ4bm549a+5kcj////////////////////////////////////////////////////bAEMBVVpaeGl464KC6//////////////////////////////////////////////////////////////////////////AABEIA/IDmAMBIgACEQEDEQH/xAAZAAEAAwEBAAAAAAAAAAAAAAAAAgMEAQX/xAAtEAEAAgECBAUFAQEBAQEBAAAAAQIDETEEEiFRMjNBYXETIlKBkUKhFCNisf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/xAAcEQEBAQEBAQEBAQAAAAAAAAAAARExQSECElH/2gAMAwEAAhEDEQA/AJgMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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 // @grant unsafeWindow // @grant GM_addStyle // @grant GM_getResourceText // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_listValues // @license MIT License // @note 1.3.4 修复了一些问题 // @noframes // @downloadURL https://update.greasyfork.icu/scripts/451555/%E2%9A%A1%EF%B8%8F%20%E6%8E%98%E9%87%91%20%EF%BD%9Ccsdn%20%EF%BD%9C%E7%9F%A5%E4%B9%8E%20%EF%BD%9C%20%E7%8B%AC%E5%AE%B6UI%E6%8E%92%E7%89%88%20%E6%9B%B4%E6%96%B9%E4%BE%BF%E6%82%A8%E7%9A%84%E9%98%85%E8%AF%BB%F0%9F%93%96%20%E5%8E%BB%E5%B9%BF%E5%91%8A%F0%9F%AA%A7%20%E5%85%8D%E7%99%BB%E5%BD%95%E5%A4%8D%E5%88%B6%20%E4%B8%80%E9%94%AE%E5%A4%8D%E5%88%B6%20%E5%8E%BB%E5%89%AA%E8%B4%B4%E6%9D%BF%E5%8A%AB%E6%8C%81%20%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0%20%E5%A4%96%E9%93%BE%E8%B7%B3%E8%BD%AC%20%E5%AE%BD%E5%B1%8F%E5%B1%95%E7%A4%BA%20%E4%B8%8D%E5%AE%9A%E6%9C%9F%E5%B8%AE%E5%BF%99%E4%B8%8B%E8%BD%BD%E8%B5%84%E6%BA%90.user.js // @updateURL https://update.greasyfork.icu/scripts/451555/%E2%9A%A1%EF%B8%8F%20%E6%8E%98%E9%87%91%20%EF%BD%9Ccsdn%20%EF%BD%9C%E7%9F%A5%E4%B9%8E%20%EF%BD%9C%20%E7%8B%AC%E5%AE%B6UI%E6%8E%92%E7%89%88%20%E6%9B%B4%E6%96%B9%E4%BE%BF%E6%82%A8%E7%9A%84%E9%98%85%E8%AF%BB%F0%9F%93%96%20%E5%8E%BB%E5%B9%BF%E5%91%8A%F0%9F%AA%A7%20%E5%85%8D%E7%99%BB%E5%BD%95%E5%A4%8D%E5%88%B6%20%E4%B8%80%E9%94%AE%E5%A4%8D%E5%88%B6%20%E5%8E%BB%E5%89%AA%E8%B4%B4%E6%9D%BF%E5%8A%AB%E6%8C%81%20%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0%20%E5%A4%96%E9%93%BE%E8%B7%B3%E8%BD%AC%20%E5%AE%BD%E5%B1%8F%E5%B1%95%E7%A4%BA%20%E4%B8%8D%E5%AE%9A%E6%9C%9F%E5%B8%AE%E5%BF%99%E4%B8%8B%E8%BD%BD%E8%B5%84%E6%BA%90.meta.js // ==/UserScript== (function () { GM_addStyle(GM_getResourceText("css")); const VERSION = '1.3.3' const TITLE = 'BLOGUI' let ISH5 = null let CURRENTPAGES = null const BLOGUICONFIG = { 2: { webType: "CSDN", pc: [ { title: "查看模式", children: [ { type: "radio", for: "CsdnRadioC", label: "居中显示", checked: true, getEvent: 'csdnRadioC' }, { type: "radio", for: "CsdnRadioP", label: "铺平展示", checked: false, getEvent: 'csdnRadioP' }, ] }, { title: "右侧选项", children: [ // 左侧 { type: "checked", domId: "#asideProfile", for: "CsdnAuthorInfo", label: "作者信息", checked: true }, { type: "checked", domId: "#asidedirectory", for: "CsdnDirectory", label: "目录", checked: false, getEvent: 'csdnDirectory' }, { type: "checked", domId: "#asideSearchArticle", for: "CsdnSerch", label: "搜索博主文章", checked: false }, { type: "checked", domId: "#asideRank", for: "CsdnAsideRank", label: "是否入选", checked: false }, { type: "checked", domId: "#asideHotArticle", for: "CsdnHotPage", label: "热门文章", checked: false }, { type: "checked", domId: "#asideCategory", for: "CsdnCategory", label: "分类专栏", checked: false }, { type: "checked", domId: "#asideNewComments", for: "CsdnComments", label: "最新评论", checked: false }, { type: "checked", domId: "#asideNewNps", for: "CsdnNewNps", label: "推荐博客", checked: false }, { type: "checked", domId: "#asideArchive", for: "CsdnArchive", label: "最新文章", checked: false }, { type: "checked", domId: "#asideWriteGuide", for: "CsdnWriteGuide", label: "发布文章", checked: false }, ] }, { title: "文章底部", children: [ { type: "checked", domId: ".recommend-box", for: "CsdnRecommend", label: "底部相关推荐", checked: false }, { type: "checked", domId: "#pcCommentBox", for: "CsdnpcCommentBox", label: "评论", checked: false }, { type: "checked", domId: "#blogExtensionBox", for: "CsdnblogExtensionBox", label: "引流信息", checked: false }, { type: "checked", domId: "#treeSkill", for: "CsdntreeSkill", label: "知识档案匹配", checked: false }, ] }, { title: "顶部导航", children: [ { type: "checked", domId: "", for: "Csdn2top", label: "顶部导航信息", checked: false, getEvent: 'removeTopbar' }, ] }, { title: "右下角悬浮", children: [ { type: "checked", domId: "", for: "CsdnSideToolbar", label: "侧边悬浮(略有延迟)", checked: false, getEvent: 'removeSideToolbar' }, ] }, { title: "其他", children: [ { type: "checked", domId: "", for: "whiteBack", label: "白色背景(对于暗色主题兼容并不好)", checked: false, getEvent: 'whiteBack' }, ] }, { title: "操作", children: [ { type: "button", class: "buttoncolor1", label: "初始化当前页面配置", getEvent: 'clearCache("BLOGUICONFIG", "2")' } ] } ], h5: [ { title: "底部", children: [ // 底部相关推荐 { type: "checked", domId: "#recommend", for: "CsdnH5Recommend", label: "底部相关推荐", checked: false }, { type: "checked", domId: "#comment", for: "CsdnH5Comment", label: "底部登录", checked: false }, { type: "checked", domId: "#blogExtensionBox", for: "CsdnH5blogExtensionBox", label: "引流信息", checked: false }, { type: "checked", domId: "", for: "CsdnH5operate", label: "底部操作是否固定", checked: false, getEvent: 'operate' } ] }, { title: "顶部", children: [ { type: "checked", domId: ".openApp", for: "CsdnH5openApp", label: "打开App", checked: false } ] }, { title: "操作", children: [ { type: "button", class: "buttoncolor1", label: "初始化当前页面配置", getEvent: 'clearCache("BLOGUICONFIG", "2")' } ] } ] }, 3: { webType: "CSDN", pc: [ { title: "顶部导航", children: [ { type: "checked", domId: "", for: "Csdn3top", label: "顶部导航信息", checked: false, getEvent: 'removeTopbar' }, { type: "checked", domId: ".blog-nps", for: "CsdnBlogNps", label: "推荐CSDN", checked: false } ] }, { title: "右侧", children: [ { type: "checked", domId: ".blog-slide-box .template", for: "Csdntemplate", label: "热门推荐/作者推荐", checked: true }, { type: "checked", domId: ".blog-slide-box .blogTree", for: "CsdnblogTree", label: "技能树", checked: true }, ] }, { title: "其他", children: [ { type: "checked", domId: "", for: "CsdnblogNav", label: "平铺显示", getEvent: 'blogNav' } ] }, { title: "操作", children: [ { type: "button", class: "buttoncolor1", label: "初始化当前页面配置", getEvent: 'clearCache("BLOGUICONFIG", "3")' } ] } ] }, 4: { webType: "CSDN", pc: [ { title: "顶部导航", children: [ { type: "checked", domId: "", for: "Csdn4top", label: "顶部导航信息", checked: false, getEvent: 'removeTopbar' } ] }, { title: "右侧", children: [ { type: "checked", domId: ".main-rt .so-questionnaire-body", for: "Csdnquestionnaire", label: "推荐CSDN", checked: false }, { type: "checked", domId: ".main-rt .so-hot-words", for: "Csdnhot-words", label: "相关搜索", checked: false }, { type: "checked", domId: ".main-rt .wrap-hot", for: "Csdnwrap-hot", label: "猜你想搜", checked: false }, { type: "checked", domId: ".main-rt .related-list", for: "related-list", label: "热搜榜", checked: false }, { type: "checked", domId: ".main-rt .so-items-taglist", for: "Csdntaglist", label: "相关标签", checked: false } ] }, { title: "其他", children: [ { type: "checked", domId: "", for: "CsdnSoNav", label: "平铺显示(请勿与其他同用)", getEvent: 'soPc' } ] }, { title: "操作", children: [ { type: "button", class: "buttoncolor1", label: "初始化当前页面配置", getEvent: 'clearCache("BLOGUICONFIG", "4")' } ] } ] }, 5: { webType: "JUEJIN", pc: [ // { // title: "查看模式", // children: [ // { type: "radio", for: "JuejinRadioC", label: "放大显示", checked: true, getEvent: 'juejinRadioC' }, // { type: "radio", for: "JuejinRadioP", label: "居中显示", checked: false, getEvent: 'juejinRadioP' }, // ] // }, { title: "顶部", children: [ { type: "checked", label: "顶部操作", for: "JuejinTop", checked: false, getEvent: 'JuejinTop' } ] }, { title: "左边栏", children: [ { type: "checked", domId: ".article-suspended-panel", for: "JuejinSuspended", label: "点赞收藏等按钮", checked: false }, ] }, { title: "右边栏", children: [ { type: "checked", domId: ".author-block", for: "JuejinAuthor", label: "作者信息", checked: true }, { type: "checked", domId: ".article-catalog", for: "JuejinSticky", label: "目录", checked: true, getEvent: 'JuejinGetMenu' }, { type: "checked", domId: ".wechat-sidebar-block", for: "JuejinSidebar", label: "圈子", checked: false }, { type: "checked", domId: ".next-article", for: "JuejinNext-article", label: "下一篇", checked: false }, { type: "checked", domId: ".related-entry-sidebar-block", for: "JuejinRelated", label: "相关文章", checked: false, getEvent: 'JuejinRelated' }, ] }, { title: "底部", children: [ { type: "checked", domId: ".column-container", for: "JuejinContainer", label: "收录", checked: false }, { type: "checked", domId: ".extension-banner", for: "JuejinExtension-banner", label: "插件", checked: false }, { type: "checked", domId: ".category-course-recommend", for: "JuejiCategory", label: "相关课程", checked: false }, { type: "checked", domId: ".comment-list-box", for: "JuejinComment", label: "评论", checked: false }, { type: "checked", domId: ".recommended-area", for: "JuejinRecommended", label: "相关推荐", checked: false }, { type: "checked", domId: ".meiqia-btn", for: "JuejinMeiqia", label: "建议反馈", checked: false }, { type: "checked", domId: ".recommended-links", for: "JuejinLinks", label: "友情链接", checked: false } ] }, { title: "操作", children: [ { type: "button", class: "buttoncolor1", label: "初始化当前页面配置", getEvent: 'clearCache("BLOGUICONFIG", "5")' } ] } ] }, 6: { webType: "JUEJIN", pc: [ { title: "顶部", children: [ { type: "checked", label: "顶部操作", for: "JuejinTop", checked: false, getEvent: 'JuejinTop' } ] }, { title: "右边广告", children: [ { type: "checked", domId: ".signin-tip", for: "JuejinSignin", label: "签到", checked: true }, { type: "checked", domId: ".user-block", for: "JuejinUserBlock", label: "作者榜", checked: false }, { type: "checked", domId: ".link-block", for: "JuejinLinkBlock", label: "插件列表", checked: false }, { type: "checked", domId: ".index-aside-footer", for: "JuejinAsideFoot", label: "底部版权", checked: false }, ] }, { title: "操作", children: [ { type: "button", class: "buttoncolor1", label: "初始化当前页面配置", getEvent: 'clearCache("BLOGUICONFIG", "6")' } ] } ] }, 7: { webType: "JUEJIN", pc: [ { title: "顶部", children: [ { type: "checked", label: "顶部操作", for: "JuejinTop", checked: false, getEvent: 'JuejinTop' } ] } ] }, 8: { webType: "SiFou", pc: [ { title: "查看模式", children: [ { type: "radio", for: "SiFouRadioC", label: "居中显示", checked: true, getEvent: 'SiFouRadioC' }, { type: "radio", for: "SiFouRadioP", label: "铺平展示", checked: false, getEvent: 'SiFouRadioP' }, ] }, { title: "文章底部", children: [ { type: "checked", domId: "#answer-question", for: "SiFouQuestion", label: "撰写回答", checked: true }, { type: "checked", domId: "", for: "SiFouMt4", label: "相似问题", checked: true, getEvent: 'similarPro' } ] }, { title: "顶部导航", children: [ { type: "checked", domId: "", for: "SiFoutop", label: "顶部导航信息", checked: false, getEvent: 'removeSifouTopbar' }, ] }, { title: "操作", children: [ { type: "button", class: "buttoncolor1", label: "初始化当前页面配置", getEvent: 'clearCache("BLOGUICONFIG", "8")' } ] } ] }, 9: { webType: "SiFou", pc: [ { title: "查看模式", children: [ { type: "radio", for: "SiFouRadioC", label: "居中显示", checked: true, getEvent: 'SiFouRadioC' }, { type: "radio", for: "SiFouRadioP", label: "铺平展示", checked: false, getEvent: 'SiFouRadioP' }, ] }, { title: "文章底部", children: [ { type: "checked", domId: "#comment-area", for: "SiFouComment", label: "评论", checked: true }, { type: "checked", domId: "", for: "SiFouRead", label: "继续阅读", checked: false, getEvent: 'similarRead' } ] }, { title: "顶部导航", children: [ { type: "checked", domId: "", for: "SiFoutop", label: "顶部导航信息", checked: false, getEvent: 'removeSifouTopbar' }, ] }, { title: "操作", children: [ { type: "button", class: "buttoncolor1", label: "初始化当前页面配置", getEvent: 'clearCache("BLOGUICONFIG", "9")' } ] } ] }, 10: { webType: "ZhiHu", pc: [ // { // title: "查看模式", // children: [ // { type: "radio", for: "ZhiHuC", label: "居中显示", checked: true, getEvent: 'ZhiHuRadioC' }, // { type: "radio", for: "ZhiHuP", label: "铺平展示", checked: false, getEvent: 'ZhiHuRadioP' }, // ] // }, { title: "右侧", children: [ { type: "checked", domId: ".css-oyqdpg", for: "ZhihuSimilarQuestions", label: "相关问题", checked: false }, { type: "checked", domId: "div[data-za-detail-view-path-module_name='相关推荐']", for: "ZhihuRecommend", label: "相关推荐", checked: false }, { type: "checked", domId: "Footer", for: "ZhihuQFooter", label: "版权其他", checked: false } ] } ] }, 11: { webType: "ZhiHu", pc: [ { title: "查看模式", children: [ { type: "radio", for: "ZhiHuC", label: "居中显示", checked: true, getEvent: 'ZhiHuRadioC' }, { type: "radio", for: "ZhiHuP", label: "铺平展示", checked: false, getEvent: 'ZhiHuRadioP' }, ] }, { title: "底部", children: [ { type: "checked", domId: "div[aria-label='推荐阅读']", for: "ZhihuRead", label: "推荐阅读", checked: false } ] } ] }, 12: { webType: "ZhiHu", pc: [ { title: "右侧", children: [ { type: "checked", domId: "div[aria-label='搜索发现']", for: "ZhihuSearch", label: "搜索发现", checked: false }, { type: "checked", domId: "Footer", for: "ZhihuSQFooter", label: "版权其他", checked: false } ] } ] }, } let asideWidth = '0px' // ---------- 通用方法 ------------ // 通过当前地址获取现在是那个网站 function initUrl() { let url = window.location.href let urlResList = [ { platform: 'CSDN', reg: /.*blog.csdn.net.*\/details\/.*/, title: 'CSDN详情优化', key: 2 }, { platform: 'CSDN', reg: /.*blog.csdn.net\/nav.*/, title: 'CSDN文章类型列表优化', key: 3 }, // { platform: 'CSDN', reg: /.*blog.csdn.net\.*/, title: 'CSDN文章类型推荐优化', key: 3.1 }, { platform: 'CSDN', reg: /.*so.csdn.net\/.*/, title: 'CSDN搜索页面', key: 4 }, { platform: 'Juejin', reg: /juejin.cn\/post\/.*/, title: '掘金文章详情', key: 5 }, { platform: 'Juejin', reg: /juejin.cn\/search\?.*/, title: '掘金搜索页面', key: 7 }, { platform: 'Juejin', reg: /juejin.cn/, title: '掘金首页', key: 6 }, { platform: 'SiFou', reg: /segmentfault.com\/q\/.*/, title: '思否问答详情', key: 8 }, { platform: 'SiFou', reg: /segmentfault.com\/a.*/, title: '思否文章详情', key: 9 }, { platform: 'ZhiHu', reg: /zhihu.com\/question\/.*/, title: '知乎问答', key: 10 }, { platform: 'ZhiHu', reg: /zhuanlan.zhihu.com\/p\/.*/, title: '知乎专栏', key: 11 }, { platform: 'ZhiHu', reg: /.*zhihu.com\/search\.*/, title: '知乎搜索', key: 12 }, ] for (let i = 0; i < urlResList.length; i++) { if (urlResList[i].reg.test(url)) { CURRENTPAGES = urlResList[i].key return urlResList[i] } } } // 外链跳转 function jumpLink() { let url = document.URL let target_url = '' let flag = false if (/https:\/\/link\.csdn\.net\/.*/.test(url)) { flag = true target_url = url.split("target=")[1] setTimeout(() => { let github = getElement('.loading-btn-github') flag = github && github.length !== 0 ? false : true getElement('.loading-topic span')[0].innerText = flag ? 'Blog-UI 正在跳转到: ' : '当前链接可以使用github加速请自行选择: ' if (flag) { target_url = decodeURIComponent(target_url) // 编码 setTimeout(() => { window.location.href = target_url; }, 500) } }, 500) } if (/https:\/\/link\.juejin\.cn\/.*/.test(url) || /https:\/\/link\.zhihu\.com\/.*/.test(url)) { target_url = url.split("target=")[1] // setTimeout(() => { getElement('.content .title')[0].innerText = 'Blog-UI 正在跳转到: ' }) initDialog('body', "Blog-UI 正在跳转") target_url = decodeURIComponent(target_url) // 编码 setTimeout(() => { window.location.href = target_url; }, 500) } } function addEvent(className, eventType, callback) { let dom = getElement(className)[0] dom.addEventListener(eventType, callback) } // 设置缓存更改 配置文件 function generalCetch() { let parentConfig = BLOGUICONFIG[CURRENTPAGES][ISH5 ? 'h5' : 'pc'] if (parentConfig.length !== 0) { // 设置缓存中的内容 并更新 源配置文件 parentConfig.forEach((item) => { item.children.forEach((childrenItem, index, arr) => { // 如果没有for 就证明不需要缓存 if (!childrenItem.for) { return } if (GM_listValues().includes(childrenItem.for)) { arr[index].checked = GM_getValue(childrenItem.for) } else { GM_setValue(childrenItem.for, childrenItem.checked) } }) }) addMain(parentConfig, BLOGUICONFIG[CURRENTPAGES].webType) // 生成虚拟节点 } } // 生成虚拟节点 function addMain(config, type) { let parentDom = getElement('.blog-ui-setting')[0] let parentVDom = render({ tag: 'div', prop: { class: "blog-ui-csdn" }, children: [ { tag: 'div', prop: { class: "blog-ui-csdn-main" }, } ] }) parentDom.appendChild(parentVDom) let itemDom = getElement('.blog-ui-csdn-main')[0] config.forEach((configItem, index) => { let vDom = render({ tag: 'div', prop: { class: "blog-ui-item" }, children: [ { tag: 'div', prop: { class: "blog-ui-config-title" }, children: configItem.title }, { tag: 'div', prop: { class: "blog-ui-config-center", parentIndex: index }, children: actionDom(configItem.children, type) } ] }) itemDom.appendChild(vDom) }) } // 操作区 function actionDom(configItem, type) { let actionDom = [] for (let i = 0; i < configItem.length; i++) { let checkObj = null if (configItem[i].type === 'checked') { checkObj = checkBox(configItem[i], type) } else if (configItem[i].type === 'button') { checkObj = buttonBox(configItem[i]) } else if (configItem[i].type === 'radio') { checkObj = radioBox(configItem[i]) } actionDom.push(checkObj) } return actionDom } // 生成多选框 function checkBox(item, type) { let checkObj = { tag: "input", prop: { "type": "checkbox", "id": item.for, "domId": item.domId, "index": item.index, "event": item.getEvent, "on": { change: (e) => { var target = e.target, targetTag = target.tagName; if (targetTag === "INPUT") { if (GM_listValues().includes(target.id)) { GM_setValue(target.id, target.checked) } var event = target.getAttribute('event') event != 'undefined' ? eval(`${event}(${target.checked}, '${target.attributes.domId.value}')`) : setDomEvent(target, type) } } } } } if (item.checked) { checkObj.prop.checked = true } let currentDom = { tag: 'div', prop: { "class": "setting-item" }, children: [ checkObj, { tag: "label", prop: { "class": "form-check-label", "for": item.for, "domId": item.domId }, children: item.label } ] } return currentDom } // 生成按钮 function buttonBox(item) { return { tag: "button", prop: { class: item.class, "on": { click: (e) => { var target = e.target, targetTag = target.tagName; if (targetTag == 'BUTTON') { eval(`${item['getEvent']}`) } } } }, children: item.label } } // 生成单选 function radioBox(item) { let radio = { tag: "input", prop: { 'type': item.type, 'name': 'radio', "id": item.for, "on": { change: (e) => { var target = e.target, targetTag = target.tagName; if (targetTag == 'INPUT') { eval(`${item['getEvent']}()`) } } } } } if (item.checked) { radio.prop.checked = true } let radioVdom = { tag: 'div', prop: { class: 'radio-item' }, children: [ radio, { tag: 'span', prop: { class: 'radio-label' }, children: item.label } ] } return radioVdom } // 初始化当前页面配置 function clearCache(plat, key) { let config = eval(`${plat}[${key}]`) config[ISH5 ? 'h5' : 'pc'].forEach(item => { item.children.forEach(detailItem => { if (detailItem.for && GM_listValues().includes(detailItem.for)) { GM_deleteValue(detailItem.for) } }) }) location.reload(); } // 添加主页面 function domHtml(urlObject) { let DomHtml = `
Blog-UI 设置界面
${urlObject.title}
` let app = document.createElement('div') app.setAttribute('id', 'blogUiApp') document.querySelectorAll('body')[0].appendChild(app) app.innerHTML = DomHtml } // 获取元素 function getElement(className) { let domList = document.querySelectorAll(className) if (!domList || domList.length === 0) { return '' } else { return domList } } // 初始化一个弹用于消息提示 function initDialog(parentDom, title) { let oldDialog = getElement('.dialog-dom')[0] if (oldDialog) { oldDialog.remove() } let dialogVDom = document.createElement('div') dialogVDom.setAttribute('class', 'dialog-dom') dialogVDom.innerText = title setTimeout(() => { dialogVDom.setAttribute('style', 'opacity: 1; transition: all 1s;') }, 0) let parentVDom = getElement(parentDom)[0] parentVDom.appendChild(dialogVDom) setTimeout(() => { dialogVDom.setAttribute('style', 'opacity: 0; transition: all 1s;') }, 2000) } // 设置隐藏显示 function displayDom(domNode, type) { if (!domNode) { return } // 对于一些动态加载的节点 如果没有查到就加入 一个错误队列中 每1000毫秒查找一次 let dom = getElement(domNode) let errorList = [] if (dom && dom.length > 0) { dom.forEach(item => { item.style['display'] = type ? 'block' : 'none' }) } else { errorList.push({ domNode, type }) } if (errorList.length !== 0) { let i = 0 let interval = setInterval(() => { if (i <= 5) { errorList.forEach(item => { let errorDom = getElement(domNode) if (errorDom && errorDom.length > 0) { errorDom.forEach(item => { item.style['display'] = type ? 'block' : 'none' }) } }) i++ } else { clearInterval(interval) } }, 3000) } } // 输出 function log(message, type = 'log') { console[type](message) } // 创建dom 元素 function render(Vnode) { let { tag, prop, children } = Vnode let el = document.createElement(tag) Object.keys(prop).forEach(item => { el.setAttribute(item, prop[item]); if (item === 'on') { let eventObject = prop[item] Object.keys(eventObject).forEach(eventItem => { el.addEventListener(eventItem, (e) => eventObject[eventItem](e)) }) } }) if (children instanceof Array) { children.forEach((item) => { el.appendChild(render(item)); }); } else { el.textContent = children } return el } // 设置点击事件 在这里需要进行分发 function setDomEvent(e, type) { let checkedFlag = e.checked let domId = e.attributes.domid.value switch (type) { case 'CSDN': CSDNEvent(domId, checkedFlag) case 'JUEJIN': JUEJINEvent(domId, checkedFlag) case 'SiFou': SiFouEvent(domId, checkedFlag) case 'ZhiHu': ZhiHuEvent(domId, checkedFlag) } } // 添加外部样式 function addCss(className, query) { let dom = getElement(className)[0] Object.keys(query).forEach(item => { dom.style[item] = query[item] }) } // 添加其他内容 function appendDom() { let html = `

当前版本号: ${VERSION}

作者本人也是做前端开发的

有兴趣的小伙伴可以加百人大群 一起探讨交流


   '差评' 去提交个建议      '好评' 给作者点个赞

广告警告🪧

也不算广告啦 也是之前作者写的VScode插件

⬅️ 叫做 'exclusive-translation' 专属翻译
🌟可以直接vscode搜索 '百度翻译'安装 可以直接中英翻译🌟
如果有问题或者建议可以及时联系群主或者github提issues, 我也很希望大家能提提意见, 我看到后会及时内回复各位, 祝各位使用愉快
未来版本将要更新的功能:
1.对CSDN下载资源对优化
2.添加博客园 掘金 知乎 简书 思否 等技术论坛等优化
3.可以对文章主要部分进行打印 PDF 获取
4.目前只想到这些吧 其他的 想起来在写

` let parentDom = getElement('.blog-ui-csdn')[0] let createDom = document.createElement('div') createDom.innerHTML = html parentDom.appendChild(createDom) } function initMainEvent() { addEvent('#blog-ui-main', 'click', (e) => { console.log(123) addCss('#blog-main', { display: 'inherit' }) if (getElement('.bscroll-vertical-scrollbar').length !== 0) { getElement('.bscroll-vertical-scrollbar')[0].remove() } getElement('.blog-ui-csdn')[0].style.transform = 'translateX(0px) translateY(0px) translateZ(1px)' }) // 设置鼠标移入svg 显示主菜单 addEvent('#blog-ui-main', 'mouseenter', (e) => { console.log(0) addCss('#blog-main', { display: 'inherit' }) if (getElement('.bscroll-vertical-scrollbar').length !== 0) { getElement('.bscroll-vertical-scrollbar')[0].remove() } getElement('.blog-ui-csdn')[0].style.transform = 'translateX(0px) translateY(0px) translateZ(1px)' }) addEvent('#blog-main', 'mouseleave', () => { addCss('#blog-main', { display: 'none' }) }) var screen_width = document.body.offsetWidth; var screen_height = window.innerHeight; let father = getElement('#blogUiApp')[0] if (GM_getValue('x')) { father.style.top = GM_getValue('y') father.style.left = GM_getValue('x') } addEvent('#blog-ui-main', 'mousedown', (e) => { var x = e.pageX - father.offsetLeft var y = e.pageY - father.offsetTop function move(e) { let Py = e.pageY - y let Px = e.pageX - x father.style.top = Py + 'px' father.style.left = Px + 'px' if (Py < 20) { father.style.top = 20 + 'px' } else if (Py > (screen_height - 50)) { father.style.top = screen_height - 50 + 'px' } if (Px < 5) { father.style.left = 5 + 'px' } else if (Px > (screen_width - 50)) { father.style.left = screen_width - 50 + 'px' getElement('#blog-ui-main')[0].style.reight = '5px' } GM_setValue('x', father.style.left) GM_setValue('y', father.style.top) } document.addEventListener('mousemove', move) document.addEventListener('mouseup', function () { document.removeEventListener('mousemove', move) }) }) addEvent('#blog-ui-main', 'touchstart', (e) => { var x = e.changedTouches[0].pageX - father.offsetLeft var y = e.changedTouches[0].pageY - father.offsetTop function move(e) { let Py = e.changedTouches[0].pageY - y let Px = e.changedTouches[0].pageX - x father.style.top = Py + 'px' father.style.left = Px + 'px' if (Py < 20) { father.style.top = 20 + 'px' } else if (Py > (screen_height - 50)) { father.style.top = screen_height - 50 + 'px' } if (Px < 5) { father.style.left = 5 + 'px' } else if (Px > (screen_width - 50)) { father.style.left = screen_width - 50 + 'px' getElement('#blog-ui-main')[0].style.reight = '5px' } GM_setValue('x', father.style.left) GM_setValue('y', father.style.top) } document.addEventListener('touchmove', move) document.addEventListener('touchend', function () { document.removeEventListener('touchmove', move) }) }) } // ----------- CSDN 专区 ---------- function csdnDirectory(checkedFlag, domId) { CSDNEvent(domId, checkedFlag) if (checkedFlag && domId) { csdnSetMenuHeight(flag = true) } } function csdnSetMenuHeight(flag = false) { setTimeout(() => { let asidedirectory = getElement('#asidedirectory')[0] if (asidedirectory) { let blog_container_aside = Array.from(getElement('.blog_container_aside')[0].children) let height = 0 blog_container_aside.forEach((item) => { height += item.offsetHeight }) height = height - asidedirectory.offsetHeight GM_setValue('CSDNMenuHeight', height) let CSDNMenuHeight = GM_getValue("CSDNMenuHeight") csdnScrollMenu(asidedirectory, CSDNMenuHeight) window.onscroll = (e) => { csdnScrollMenu(asidedirectory, CSDNMenuHeight) } } }, 1000) } function csdnScrollMenu(asidedirectory, CSDNMenuHeight) { let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop if (scrollTop > CSDNMenuHeight) { asidedirectory.classList.add('default-menu') } else { asidedirectory.classList.remove('default-menu') } } function csdnRadioP() { GM_setValue('CsdnRadioC', false) GM_setValue('CsdnRadioP', true) getElement('.main_father')[0].style = `height: 100%; width: 97vw; justify-content: unset;` getElement('.container')[0].style = `display: flex;width: 97vw;` } function csdnRadioC() { GM_setValue('CsdnRadioP', false) GM_setValue('CsdnRadioC', true) getElement('.main_father')[0].style = `height: 100%; width: 97vw; justify-content: center;` getElement('.container')[0].style = `display: flex;` } function CSDNIsH5OrPC(id) { // h5 移动端端时候的主元素ID let dom = getElement(id) if (dom && dom.length > 0) { return true } else { return false } } // csdn 点击操作区部分触发的事件 function CSDNEvent(domId, checked) { displayDom(domId, checked); (!ISH5 && CURRENTPAGES == 2) ? setAside() : '' // 点击之后进行判断是不是没有右侧的侧边栏了 window.onscroll = null csdnSetMenuHeight() } // -------- csdn 通用 --------- // 处理顶部 function removeTopbar(checked) { setTimeout(() => { // 处理左侧 getElement('.toolbar-menus li').forEach(item => { let dataType = item.getAttribute('title') if (['高价值源码课程分享', '简单高效优惠的云服务', '程序员的如意兵器', '找到志同道合的伙伴', '系统学习·问答·比赛', '开源代码托管', '让你的灵感立即落地'].includes(dataType)) { item.style.display = checked ? 'inline-block' : 'none' } }) // 判断是否登录 let loginDom = getElement('.toolbar-btn-loginfun') // 已经登录 if (!loginDom) { return } // 删除顶部右侧 ['.toolbar-btn-vip', '.toolbar-btn-collect', '.toolbar-dynamic-box', '.toolbar-mp-menubox', '.toolbar-btn-write', '.toolbar-advert', '.toolbar-btn-mp', '.toolbar-btn-msg'].forEach(item => { displayDom(item, checked) }) }, 500) } function whiteBack(checked) { if (checked) { getElement('body')[0].classList.add('bodyWhite') } else { getElement('body')[0].classList.remove('bodyWhite') } } // 优化开始 function CSDNOoptimiz(key) { if (!ISH5) { let removeDom = ['#recommendNps', '.template-box', '.blog-footer-bottom', '#csdn-copyright-footer'] // 删除可以直接通类名进行获取的元素 removeDom.forEach(item => { displayDom(item, false) }) } // getElement('.passport-login-container')[0].style.display = 'none' // 点击登录注册按钮进行展示登录页面 let loginShow = ['.toolbar-btn-login', '.unlogin-comment-bt'] loginShow.forEach(item => { let loginDom = getElement(item) loginDom && loginDom.length != 0 && loginDom[0].addEventListener('click', () => { setTimeout(() => { getElement('.passport-login-container')[0].style.display = 'block' }, 500) }) }) if (key === 2) { // 解除点击全选 let hljdButton = getElement(".hljs-button") if (hljdButton && hljdButton.length !== 0) { hljdButton.forEach(item => { item.setAttribute('data-title', '免登录复制') item.addEventListener('click', (event) => { const parentPreBlock = event.target.closest("pre"); let code = parentPreBlock.querySelectorAll('code')[0] navigator.clipboard.writeText(code.innerText) item.setAttribute('data-title', '复制成功') setTimeout(() => { item.setAttribute('data-title', '免登录复制') }, 3000) }) }) } // 复制 getElement('#content_views')[0].oncopy = function(event) { const selection = document.getSelection() event.clipboardData.setData("text/plain", selection.toString()) event.preventDefault() } // 展开code 折叠 document.querySelectorAll('.hide-preCode-bt').forEach(item => { item.click() }) ISH5 ? csdnDeatilH5() : csdnDeatilPc() } } // -----------详情页面处理方法------ // 判断右侧 的 侧边栏是不是全都有display:none 如果有就进行全屏显示 function setAside() { let blog_container_aside = getElement('.blog_container_aside')[0] setTimeout(() => { let domList = [] getElement('.blog_container_aside .aside-box').forEach(item => { domList.push(item.style.display) }) if (domList.filter(item => { return item == 'block' }).length == 0) { asideWidth = '0px' } else { asideWidth = '300px' } blog_container_aside.style.width = asideWidth }) } // 处理左侧悬浮 function removeSideToolbar(checked) { setTimeout(() => { // 删除侧边悬浮 getElement('.csdn-side-toolbar')[0].style = '' getElement('.csdn-side-toolbar .option-box').forEach(item => { let dataType = item.getAttribute('data-type') if (['search', 'guide', 'cs'].includes(dataType)) { item.style.display = checked ? 'flex' : 'none' } if (['show', 'hide'].includes(dataType)) { item.remove() } }) displayDom('.sidetool-writeguide-box', false) displayDom('.btn-sidetool-writeguide', false) displayDom('.btn-side-chatdoc-contentbox', false) getElement('.tip-box')[0].remove() }, 1000) } // operate 底部操作是否固定 function operate(checked) { let operateDom = getElement('#operate') if (operateDom && operateDom.length !== 0) { setTimeout(() => { operateDom[0].style.bottom = '0px' operateDom[0].style.position = checked ? 'fixed' : 'inherit' }) } } // 详情页面处理H5 function csdnDeatilH5() { // let loginDom = getElement('.passport-login-container') let recommendList = getElement('.container-fluid') recommendList.forEach(item => { item.addEventListener('click', (e) => { e.stopPropagation() window.open(e.currentTarget.attributes['data-url'].nodeValue) }) }) let readall_box = getElement('.readall_box') if (readall_box) { readall_box[0].remove() getElement('.article_content')[0].style.height = 'inherit' } } // 详情页面处理PC function csdnDeatilPc() { // (!ISH5 && CURRENTPAGES == 2) ? setAside() : '' // 点击之后进行判断是不是没有右侧的侧边栏了 let mainDom = getElement('.main_father')[0] mainDom.classList.remove('justify-content-center') addCss('main', { "flex": "1", "margin-right": "10px" }) // 设置右侧边栏 let blog_container_aside = getElement('.blog_container_aside')[0] var observe = new MutationObserver((list) => { blog_container_aside.style['position'] = 'relative' blog_container_aside.style['left'] = '0' blog_container_aside.style['width'] = asideWidth }) observe.observe(blog_container_aside, { attributes: true }); // 设置底部关注一栏 let toolbar = getElement('.left-toolbox')[0] toolbar.classList.add('observeToolbar') let observeToolbar = new MutationObserver((list) => { list.forEach(item => { item.target.classList.add('observeToolbar') observeToolbar.disconnect(); }) }) observeToolbar.observe(toolbar, { attributes: true }) // 去除剪贴板劫持 csdn.copyright.init("", "", ""); // 删除原始的右侧 let rightDom = getElement('.recommend-right') rightDom && rightDom[0].remove() // 关注博主才能查看 let focusUP = getElement('.hide-article-box') if (focusUP && focusUP.length !== 0) { focusUP[0].remove() getElement('#article_content')[0].style.height = 'inherit' } setTimeout(() => { setAside() // 判断右侧是否有悬浮 }, 1000) } // ------处理搜索列表--------- // 列表页是否平铺展示 function blogNav(checked) { if (checked) { getElement('.home_wrap')[0].style.width = '95vw' getElement('.blog-content')[0].style.width = '75vw' } else { getElement('.home_wrap')[0].style.width = '70vw' getElement('.blog-content')[0].style.width = '50vw' } } function soPc(checked) { setTimeout(() => { let mainDom = getElement('.clearfix')[0] checked ? mainDom.classList.remove('main') : mainDom.setAttribute('class', 'main clearfix') }, 100) } // ------- 掘金专区 --------- function JUEJINEvent(domId, checked) { displayDom(domId, checked); } function juejinRadioC() { GM_setValue('JuejinRadioC', true) GM_setValue('JuejinRadioP', false) setTimeout(() => { let dom = getElement('.main-container')[0] dom.setAttribute('style', `max-width: ${1200}px`) let main = getElement('.main-area')[0] main.style.width = '890px' }, 100) } function juejinRadioP() { GM_setValue('JuejinRadioP', true) GM_setValue('JuejinRadioC', false) // window.onload = () => { setTimeout(() => { let dom = getElement('.main-container')[0] dom.setAttribute('style', `max-width: ${1140}px`) let main = getElement('.main-area')[0] main.style.width = '820px' }) // } } function delayFunction(time, domStr) { let delay = new Promise((resolve, reject) => { let startTime = new Date().valueOf() let endTime = startTime + time * 1000 let inter = setInterval(() => { let dom = getElement(domStr) if (new Date().valueOf() < endTime && (dom && dom.length !== 0)) { clearInterval(inter) resolve(dom[0]) } else if (new Date().valueOf() > endTime) { clearInterval(inter) reject() } }, 100); }) return delay } // 相关搜索 function JuejinRelated(checked) { delayFunction(3, '.related-entry-sidebar-block').then(res => { if (!checked) { res.style.top = '-1000px' res.style.position = 'absolute' } else { res.style.top = '' res.style.position = 'relative' } }).catch((error) => { console.log('DOM 元素未找到') }) } // 目录 function JuejinGetMenu(checked) { if (checked) { displayDom('.article-catalog', true) delayFunction(3, '.sidebar').then(res => { var scroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; let offsetHeight = res.offsetHeight let dom = getElement('.sticky-block-box')[0] if (scroll + offsetHeight > offsetHeight) { dom.style.position = 'fixed' } else { dom.style.position = 'initial' } window.onscroll = (e) => { let scroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; let offsetHeight = res.offsetHeight let dom = getElement('.sticky-block-box')[0] if (scroll > offsetHeight) { dom.style.position = 'fixed' } else { dom.style.position = 'initial' } } }) } else { displayDom('.article-catalog', false) } } function JuejinOptimiz() { document.oncopy = event => event.clipboardData.setData('text', window.getSelection(0).toString()); setTimeout(() => { getElement('.article-suspended-panel .tooltip .panel-btn')[0].remove() }, 500) // 没有登陆的时候 顶部的处理 let noLoginDisplay = ['.creator-item', '.vip-entry'] let isLogin = getElement('.login-button')[0] noLoginDisplay.forEach(item => { if (isLogin) { getElement(item)[0].style.display = 'none' } }) displayDom('.sidebar-bd-entry', false) displayDom('.banner', false) } // 掘金顶部数据处理 function JuejinTop(checked) { let topList = getElement('.phone-hide .nav-item') topList.forEach((item, index) => { if (index != 0) { if (item.getAttribute('tag') == 'li') { item.style.display = checked ? 'flex' : 'none' } else { item.style.display = checked ? 'block' : 'none' } } }) } // 思否点击处理事件 function SiFouEvent(domId, checked) { displayDom(domId, checked); } // 删除顶部 function removeSifouTopbar(checked) { getElement('.navbar-nav')[0].style.display = checked ? 'flex' : 'none' } function SiFouRadioC() { GM_setValue('SiFouRadioC', true) GM_setValue('SiFouRadioP', false) let DQDom = getElement('#question-wrap')[0] || getElement('.article-content')[0] DQDom.style = `max-width: auto` } function SiFouRadioP() { GM_setValue('SiFouRadioC', false) GM_setValue('SiFouRadioP', true) let DQDom = getElement('#question-wrap')[0] || getElement('.article-content')[0] DQDom.style = `max-width: 90%;` } function similarRead(checked) { setTimeout(() => { getElement('#comment-area')[0].parentElement.nextElementSibling.style.display = checked ? 'block' : 'none' // console.log(getElement('#comment-area')) }, 500) } function similarPro(checked) { setTimeout(() => { getElement('#answer-question')[0].nextElementSibling.style.display = checked ? 'block' : 'none' }, 500) } function getOnileUser() { setTimeout(() => { let parentDom = getElement('.blog-ui-csdn-main')[0] let script1 = document.createElement('script') let script2 = document.createElement('script') script1.setAttribute('id', '_wauwd4') script1.innerHTML = 'var _wau = _wau || []; _wau.push(["dynamic", "g24ioigmiv", "wd4", "c4302bffffff", "small"]);' script2.setAttribute('async', true) script2.setAttribute('src', '//waust.at/d.js') parentDom.appendChild(script1) parentDom.appendChild(script2) }, 2000) } // 知乎专区 function ZhiHuEvent(domId, checked) { displayDom(domId, checked); } function ZhihuOptimiz() { setTimeout(() => { let loginDom = getElement('.Modal-wrapper') if (loginDom) { let button = getElement('.Modal-closeButton')[0] button.click() } }, 1000) displayDom('.Banner-link', false) setInterval(() => { displayDom('.css-1ynzxqw', false) displayDom('.css-1hwwfws', false) displayDom('.Banner-link', false) }, 3000) displayDom('.AppBanner', false) let dateCreate = document.createElement('div') let parentDom = getElement('.QuestionHeader .QuestionHeader-main')[0] // let time = document.getAttribute('itemprop', 'dateCreated') let time = document.querySelector('meta[itemprop="dateCreated"]') if(time) { // debugger let content = time.getAttribute('content') let insertTime = new Date(content).toLocaleString() dateCreate.innerHTML = '提问时间:' + insertTime.replaceAll('/', '-') dateCreate.setAttribute('class', 'ContentItem-time') parentDom.appendChild(dateCreate) } } function ZhiHuRadioP() { GM_setValue('ZhiHuC', false) GM_setValue('ZhiHuP', true) setTimeout(() => { ['.ContentItem-time', '.Post-Header', '.Post-RichTextContainer', '.Post-topicsAndReviewer', 'div[data-za-detail-view-path-module=CommentList]', '.Post-topicsAndReviewer+div'].forEach(item => { getElement(item)[0].setAttribute('style', 'width: 1200px') }) getElement('.Post-SideActions')[0].setAttribute('style', 'right:calc(50vw - 795px)') }, 100) } function ZhiHuRadioC() { GM_setValue('ZhiHuC', true) GM_setValue('ZhiHuP', false) setTimeout(() => { ['.ContentItem-time', '.Post-Header', '.Post-RichTextContainer', '.Post-topicsAndReviewer', 'div[data-za-detail-view-path-module=CommentList]', '.Post-topicsAndReviewer+div'].forEach(item => { getElement(item)[0].setAttribute('style', 'width: 690px') }) getElement('.Post-SideActions')[0].setAttribute('style', 'right:calc(50vw - 495px)') }, 100) } // -------- 主函数 ------------- function mainInit() { // 获取url地址 判断是那个网站 let urlObject = initUrl() jumpLink() if (!urlObject) { return } // 不同平台是不是H5 switch (urlObject.platform) { case 'CSDN': ISH5 = CSDNIsH5OrPC('.csdn-toolbar'); break; // case 'ZhiHu': ISH5 = ZhihuIsH5OrPC('') default: ISH5 = false } log(CURRENTPAGES) if (CURRENTPAGES && !BLOGUICONFIG[CURRENTPAGES][ISH5 ? 'h5' : 'pc']) { log(`当前页面无优化,如果需要请联系作者`) return } // 生成主窗口 domHtml(urlObject) generalCetch() // 进行刷新这之后的设置 BLOGUICONFIG[CURRENTPAGES][ISH5 ? 'h5' : 'pc'].forEach(configItem => { configItem.children.forEach(item => { // 如果有事件那就去单独执行 否则就是 默认隐藏 if (item.getEvent && !['button'].includes(item.type)) { if (item.type === 'radio' && !item.checked) { return } else { eval(`${item.getEvent}(${item.checked}, '${item.domId}')`) } } else { setTimeout(() => { displayDom(item.domId, item.checked) }, 500) } }) }) switch (urlObject.platform) { case 'CSDN': CSDNOoptimiz(urlObject.key); break; case 'Juejin': JuejinOptimiz(urlObject.key); break; case 'ZhiHu': ZhihuOptimiz(urlObject.key); break; } // 生成附加信息 appendDom() initMainEvent() // getOnileUser() log(`当前正在优化 ${urlObject.title} 使用愉快!有问题请联系作者`) } log(`脚本启动成功, 欢迎使用${TITLE} 版本:${VERSION}`) // window.onload = () => { mainInit() })();