NotSoSharp

尝试还原萌娘百科部分一方通行所屏蔽的内容

安装此脚本?
作者推荐脚本

您可能也喜欢萌娘百科缓存部分Api请求

安装此脚本
  1. // ==UserScript==
  2. // @name NotSoSharp
  3. // @namespace https://github.com/gui-ying233/NotSoSharp
  4. // @version 1.5.1
  5. // @description 尝试还原萌娘百科部分一方通行所屏蔽的内容
  6. // @author 鬼影233
  7. // @license MIT
  8. // @match zh.moegirl.org.cn/*
  9. // @match mzh.moegirl.org.cn/*
  10. // @match mobile.moegirl.org.cn/*
  11. // @match commons.moegirl.org.cn/*
  12. // @icon https://img.moegirl.org.cn/common/b/b7/%E5%A4%A7%E8%90%8C%E5%AD%97.svg
  13. // @supportURL https://github.com/gui-ying233/NotSoSharp/issues
  14. // ==/UserScript==
  15.  
  16. (async () => {
  17. "use strict";
  18. if (
  19. new URLSearchParams(window.location.search).get("safemode") ||
  20. document.currentScript ||
  21. !document.documentElement.innerText.includes("\u266F")
  22. )
  23. return;
  24. let pageName = "";
  25. await new Promise(resolve => {
  26. const intervId = setInterval(() => {
  27. window.onload = (() => {
  28. if ([typeof mw, typeof wgULS].includes("undefined")) return;
  29. clearInterval(intervId);
  30. resolve();
  31. })();
  32. }, 50);
  33. });
  34. switch (mw.config.get("wgNamespaceNumber")) {
  35. case 2:
  36. case 3:
  37. pageName = wgULS("用户", "用戶");
  38. break;
  39. case 10:
  40. case 11:
  41. pageName = "模板";
  42. break;
  43. case 14:
  44. case 15:
  45. pageName = wgULS("分类", "分類");
  46. break;
  47. default:
  48. break;
  49. }
  50. switch (mw.config.get("wgNamespaceNumber")) {
  51. case 1:
  52. case 3:
  53. case 5:
  54. case 9:
  55. case 11:
  56. case 13:
  57. case 15:
  58. pageName += wgULS("讨论", "討論");
  59. break;
  60. default:
  61. break;
  62. }
  63. pageName += `${pageName ? ":" : ""}${mw.config.get("wgTitle")}`;
  64. const r = (a, b, c = pageName) => {
  65. if (a[b].includes("\u266F") && a[b] !== "幻影异闻录♯FE") a[b] = c;
  66. };
  67. r(document.getElementById("firstHeading"), "innerText");
  68. r(document, "title", `${pageName} - 萌娘百科_万物皆可萌的百科全书`);
  69. switch (mw.config.get("skin")) {
  70. case "vector":
  71. document.body
  72. .querySelectorAll(".toctext")
  73. .forEach(e =>
  74. r(e, "innerText", decodeURI(e.parentElement.hash.slice(1)))
  75. );
  76. break;
  77. case "moeskin":
  78. default:
  79. document.body
  80. .querySelectorAll(".moe-toc-tree.root a.anchor-link")
  81. .forEach(e =>
  82. r(e, "title", decodeURI(e.hash.replaceAll(".", "%")))
  83. );
  84. document.body
  85. .querySelectorAll(".moe-toc-tree.root a.anchor-link > .text")
  86. .forEach(e =>
  87. r(
  88. e,
  89. "innerText",
  90. decodeURI(
  91. e.parentElement.hash.replaceAll(".", "%")
  92. ).slice(1)
  93. )
  94. );
  95. break;
  96. }
  97. document.body
  98. .querySelectorAll(".mw-headline")
  99. .forEach(e => r(e, "innerText", decodeURI(e.id)));
  100. document.body.querySelectorAll("a:not(#catlinks a)").forEach(e => {
  101. if (
  102. e.innerText.includes("\u266F") &&
  103. (new Set(e.innerHTML).size === 1 ||
  104. e.classList.contains("mw-changeslist-title") ||
  105. e.classList.contains("mw-userlink"))
  106. )
  107. e.innerText =
  108. new URL(e).searchParams.get("title") ||
  109. e.getAttribute("data-username") ||
  110. decodeURI(e.pathname).slice(1);
  111. });
  112. document.body.querySelectorAll(".mw-selflink").forEach(e => {
  113. switch (e.innerHTML.length) {
  114. case pageName.length:
  115. r(e, "innerText");
  116. break;
  117. case mw.config.get("wgPageName").length:
  118. r(e, "innerText", mw.config.get("wgPageName"));
  119. break;
  120. }
  121. });
  122. document.body.querySelectorAll("#catlinks a").forEach(e => {
  123. if (e.innerText.includes("\u266F") && new Set(e.innerHTML).size === 1)
  124. e.innerText = decodeURI(e.pathname).slice(10);
  125. });
  126. document.body.getElementsByTagName("a").forEach(e => {
  127. if (!e.innerHTML.includes("\u266F") || e.innerHTML !== e.innerText)
  128. return;
  129. let url;
  130. switch (e.className) {
  131. case "new":
  132. url = new URL(e).searchParams.get("title");
  133. break;
  134. case "external":
  135. case "external free":
  136. case "external text":
  137. url = e.href;
  138. break;
  139. default:
  140. url = e.pathname.slice(1);
  141. break;
  142. }
  143. url = decodeURI(url);
  144. if (e.classList.contains("external")) url = url.replace(/\/$/, "");
  145. if (url.length !== e.innerText.length) return;
  146. const regexp = `${e.innerText
  147. .replaceAll(".", "\\.")
  148. .replaceAll("\u266F", ".")}`;
  149. if (url.match(regexp)) e.innerText = url.match(regexp)[0];
  150. });
  151. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址