您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Help you climb over the paywall for a so-called "Free & Open Source Software", built by someone who truly understand our generations duty. To you-know-who: *thank you*. China's OSS environment got much better because of professionals like you.
当前为
// ==UserScript== // @name Fuck-Yudao // @namespace none // @version 0.5 // @license MIT // @description Help you climb over the paywall for a so-called "Free & Open Source Software", built by someone who truly understand our generations duty. To you-know-who: *thank you*. China's OSS environment got much better because of professionals like you. // @author The love you care // @match https://www.iocoder.cn/* // @match https://doc.iocoder.cn/* // @match https://cloud.iocoder.cn/* // @grant unsafeWindow // @run-at document-end // ==/UserScript== (function() { 'use strict'; // Overwrite jqueryAlert, simply comment out `init` can disable the annoying dialog unsafeWindow.jqueryAlert = function(opts) { var dialog; dialog.show = function() {} // dialog.init(); // dialog.close(); return dialog; } // The content of yudao's pooly-written documentation. Almost at the same miserable level as uni-app's docs. // Read the docs of vue, react and a lot more responsible, real open source repos to learn how to make professional statements. let yudaosPoorlyWrittenDoc = null, prevPath = document.location.pathname; // The routes that are currently being marked as VIP only. Real jokes. const blockPathList = ['bpm', 'user-center', 'social-user', 'oauth2', 'saas-tenant', 'sms', 'mail', 'notify', 'mybatis-pro', 'dynamic-datasource', 'report', 'Spring-Boot', 'Spring-Cloud', 'api-doc', 'module-new', 'new-feature', 'dev-hot-swap', 'file', 'message-queue', 'job', 'idempotent', 'distributed-lock', 'rate-limiter', 'project-rename', 'delete-code', 'resource-permission', 'data-permission', 'deployment-linux', 'deployment-docker', 'mp', 'mall', 'pay', 'crm', 'member', 'erp', 'websocket', 'vo', 'system-log', 'ai', 'cloud-debug', 'registry-center', 'config-center', 'gateway', 'rpc', 'distributed-transaction', 'server-protection']; // If the current url is 'blocked'. // You do know that for a static documentation site nothing is really blocked, don't you const isBlocked = () => { const ret = blockPathList.some((e) => document.location.pathname.includes(e)); return ret; } // Get the documentation content wrapper element const getWrapper = () => { return document.querySelector('.content-wrapper'); } const replace = (str) => { const wrapper = getWrapper() if (str) { while (wrapper.innerHTML !== str) { wrapper.innerHTML = str } } } const contentObserver = new MutationObserver(() => { if (getWrapper().innerHTML.includes('仅 VIP 可见')) { replace(yudaosPoorlyWrittenDoc) } }) const urlObserver = new MutationObserver(() => { const wrapperEl = getWrapper() /* if (document.location.href !== 'https://doc.iocoder.cn/' && isBlocked() && !window.location.href.includes('refreshed')) { window.location.href = window.location.href + '?refreshed=1' // window.location.reload(); } */ if (prevPath !== document.location.pathname) { window.location.reload() } }) urlObserver.observe(document.body, { childList: true }) //============================================================================================================================================= const $$wrapper = getWrapper(); if (getWrapper() && isBlocked()) { yudaosPoorlyWrittenDoc = $$wrapper.innerHTML.includes('仅 VIP 可见') ? null : $$wrapper.innerHTML; unsafeWindow.$$content = yudaosPoorlyWrittenDoc; unsafeWindow.$$replace = function() { replace(unsafeWindow.$$content) } contentObserver.observe($$wrapper, { childList: true, characterData: true, subtree: true }); replace(yudaosPoorlyWrittenDoc); } //============================================================================================================================================= })();