FCTool

这是一款可以功能强大、使用简单的工具\n可将网页文章内容转为markdown文档\n可提取网页中的svg图片\n阅读的时候可以高亮显示选中的文本(需要在设置中打开,每个网站的设置都是独立的)\n可以根据规则隐藏广告内容(需要在设置中打开,每个网站的设置都是独立的)\n可以高亮下载链接,进入电影天堂等下载站的时候,如果页面中有下载地址,会高亮出来,点击下载地址方便下载到迅雷云盘或者玩客云。。

  1. // ==UserScript==
  2. // @name FCTool
  3. // @version 0.1.4
  4. // @author xiefucai
  5. // @description 这是一款可以功能强大、使用简单的工具\n可将网页文章内容转为markdown文档\n可提取网页中的svg图片\n阅读的时候可以高亮显示选中的文本(需要在设置中打开,每个网站的设置都是独立的)\n可以根据规则隐藏广告内容(需要在设置中打开,每个网站的设置都是独立的)\n可以高亮下载链接,进入电影天堂等下载站的时候,如果页面中有下载地址,会高亮出来,点击下载地址方便下载到迅雷云盘或者玩客云。。
  6. // @homepage http://xiefucai.gitee.io
  7. // @license MIT
  8. // @match *://*/*
  9. // @namespace http://tampermonkey.net/
  10. // @homepageURL http://xiefucai.gitee.io
  11. // @grant GM_registerMenuCommand
  12. // @grant GM_getResourceText
  13. // @grant GM_addStyle
  14. // @grant GM_xmlhttpRequest
  15. // @resource injectScript https://cdn.jsdelivr.net/gh/xiefucai/Chrome@master/userscripts/send2reader/index1.js?20240603
  16. // @resource injectScript_test https://localhost:3000/static/js/index.bundle.js?24
  17. // ==/UserScript==
  18.  
  19. 'use strict';
  20. const getFullPath = src => {
  21. const a = document.createElement('a')
  22. a.href = src
  23. return a.href
  24. }
  25. const getImgSrc = img => {
  26. const src =
  27. img.getAttribute('data-actualsrc') ||
  28. img.getAttribute('data-original-src') ||
  29. img.getAttribute('data-src') ||
  30. img.src ||
  31. ''
  32. return getFullPath(src)
  33. }
  34.  
  35. const corsRequest = (options, callback) => {
  36. if (typeof GM_xmlhttpRequest === 'function') {
  37. console.log('GM_xmlhttpRequest request');
  38. GM_xmlhttpRequest({
  39. ...options,
  40. /*
  41. onreadystatechange: function(event) {
  42. console.log(
  43. `Ready state: ${event.readyState}, status ${event.status}`
  44. );
  45. },
  46. onprogress: function(event) {
  47. if (event.lengthComputable) {
  48. console.log(
  49. `Downloading: ${event.loaded}/${event.total}`
  50. );
  51. }
  52. },
  53. */
  54. onload: function(res) {
  55. console.log('GM_xmlhttpRequest onload finish', res);
  56. callback(null, res.response || res);
  57. },
  58. onerror: function(res) {
  59. console.log("Can't load file.", res);
  60. callback(res)
  61. }
  62. });
  63. } else if (
  64. typeof (window.GM && window.GM.xmlHttpRequest) === 'function'
  65. ) {
  66. console.log('GM.xmlHttpRequest request');
  67. GM.xmlHttpRequest({
  68. ...options,
  69. onload: function(response) {
  70. var responseXML = null;
  71. // Inject responseXML into existing Object (only appropriate for XML content).
  72. console.log(response);
  73. if (!response.responseXML) {
  74. responseXML = new DOMParser().parseFromString(
  75. response.responseText,
  76. 'text/xml'
  77. );
  78. }
  79.  
  80. console.log(
  81. [
  82. response.status,
  83. response.statusText,
  84. response.readyState,
  85. response.responseHeaders,
  86. response.responseText,
  87. response.finalUrl,
  88. responseXML
  89. ].join('\n')
  90. );
  91. }
  92. });
  93. } else {
  94. console.log('corsRequest request');
  95. /* document.dispatchEvent(
  96. new CustomEvent('corsRequest', {
  97. detail: {
  98. options,
  99. callback: (err, data) => {
  100. console.log(err, data);
  101. if (err) {
  102. reject(err);
  103. return;
  104. }
  105. resolve(data);
  106. }
  107. }
  108. })
  109. ); */
  110. }
  111. };
  112.  
  113. if (window === top.window) {
  114. let scriptContent = GM_getResourceText('injectScript')
  115. let script = document.createElement('script')
  116. script.id = 'xiefucai-inject-script';
  117. var blob = new Blob([scriptContent], {
  118. type: 'text/javascript'
  119. });
  120. var url = URL.createObjectURL(blob);
  121. script.onerror = function () {
  122. console.log("load script ", url, "failed");
  123. new Function(scriptContent)();
  124. }
  125. script.src = url;
  126. script.charset="utf-8";
  127. document.body.corsAble = true;
  128. document.addEventListener('corsRequest', function (e) {
  129. corsRequest(e.detail.options, e.detail.callback);
  130. }, false)
  131.  
  132. document.body.appendChild(script);
  133. } else if (location.hostname === 'www.iciba.com') {
  134. const styleElem = document.createElement('link');
  135. styleElem.href = '//cdn.jsdelivr.net/gh/xiefucai/Chrome@master/userscripts/send2reader/iciba.css';
  136. // styleElem.href = 'http://localhost:3000/iciba.css';
  137. styleElem.rel = "stylesheet";
  138. styleElem.type = "text/css";
  139. document.head.appendChild(styleElem);
  140. }

QingJ © 2025

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