// ==UserScript== // @name FCTool // @version 0.1.2 // @author xiefucai // @description 这是一款可以功能强大、使用简单的工具\n可将网页文章内容转为markdown文档\n可提取网页中的svg图片\n阅读的时候可以高亮显示选中的文本(需要在设置中打开,每个网站的设置都是独立的)\n可以根据规则隐藏广告内容(需要在设置中打开,每个网站的设置都是独立的)\n可以高亮下载链接,进入电影天堂等下载站的时候,如果页面中有下载地址,会高亮出来,点击下载地址方便下载到迅雷云盘或者玩客云。。 // @homepage http://xiefucai.gitee.io // @license MIT // @match *://*/* // @namespace http://tampermonkey.net/ // @homepageURL http://xiefucai.gitee.io // @grant GM_registerMenuCommand // @grant GM_getResourceText // @grant GM_addStyle // @grant GM_xmlhttpRequest // @resource injectScript https://cdn.jsdelivr.net/gh/xiefucai/Chrome@master/userscripts/send2reader/index.js?20220410 // @resource injectScript_test https://localhost:3000/static/js/index.bundle.js?24 // @downloadURL none // ==/UserScript== 'use strict'; const getFullPath = src => { const a = document.createElement('a') a.href = src return a.href } const getImgSrc = img => { const src = img.getAttribute('data-actualsrc') || img.getAttribute('data-original-src') || img.getAttribute('data-src') || img.src || '' return getFullPath(src) } const corsRequest = (options, callback) => { if (typeof GM_xmlhttpRequest === 'function') { console.log('GM_xmlhttpRequest request'); GM_xmlhttpRequest({ ...options, /* onreadystatechange: function(event) { console.log( `Ready state: ${event.readyState}, status ${event.status}` ); }, onprogress: function(event) { if (event.lengthComputable) { console.log( `Downloading: ${event.loaded}/${event.total}` ); } }, */ onload: function(res) { console.log('GM_xmlhttpRequest onload finish', res); callback(null, res.response || res); }, onerror: function(res) { console.log("Can't load file.", res); callback(res) } }); } else if ( typeof (window.GM && window.GM.xmlHttpRequest) === 'function' ) { console.log('GM.xmlHttpRequest request'); GM.xmlHttpRequest({ ...options, onload: function(response) { var responseXML = null; // Inject responseXML into existing Object (only appropriate for XML content). console.log(response); if (!response.responseXML) { responseXML = new DOMParser().parseFromString( response.responseText, 'text/xml' ); } console.log( [ response.status, response.statusText, response.readyState, response.responseHeaders, response.responseText, response.finalUrl, responseXML ].join('\n') ); } }); } else { console.log('corsRequest request'); /* document.dispatchEvent( new CustomEvent('corsRequest', { detail: { options, callback: (err, data) => { console.log(err, data); if (err) { reject(err); return; } resolve(data); } } }) ); */ } }; if (window === top.window) { let scriptContent = GM_getResourceText('injectScript') let script = document.createElement('script') script.id = 'xiefucai-inject-script'; var blob = new Blob([scriptContent], { type: 'text/javascript' }); var url = URL.createObjectURL(blob); script.onerror = function () { console.log("load script ", url, "failed"); new Function(scriptContent)(); } script.src = url; script.charset="utf-8"; document.body.corsAble = true; document.addEventListener('corsRequest', function (e) { corsRequest(e.detail.options, e.detail.callback); }, false) document.body.appendChild(script); } else if (location.hostname === 'www.iciba.com') { const styleElem = document.createElement('link'); styleElem.href = '//cdn.jsdelivr.net/gh/xiefucai/Chrome@master/userscripts/send2reader/iciba.css'; // styleElem.href = 'http://localhost:3000/iciba.css'; styleElem.rel = "stylesheet"; styleElem.type = "text/css"; document.head.appendChild(styleElem); }