链接转换transformation to links

将网页内容中的链接转换为可点击跳转,免去手动复制

// ==UserScript==
// @name         链接转换transformation to links
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  将网页内容中的链接转换为可点击跳转,免去手动复制
// @author       code200
// @match        *://*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        GM_registerMenuCommand
// @grant        GM_setValue
// @grant        GM_getValue
// @license      GPL License
// ==/UserScript==

(function() {
    let exclude=new Map;
    exclude.set('A',1);
    exclude.set('SCRIPT',1);
    const reg=/(^(?:http(s)?:\/\/)[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$)|(http[s]?:\/\/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)/g;
    const styleStr='style="color: red !important;border-bottom: 1px solid red !important;text-shadow: 0px 2px 10px #000 !important;text-decoration: none !important;"';
    const changeConfig = { attributes: true, childList: true, subtree: true };
    var href=window.location.href;
    GM_registerMenuCommand('已转换:' + (GM_getValue('transformation_count')==undefined?0:GM_getValue('transformation_count')) + '次(点击重置)', () => {
               GM_setValue('transformation_count', 0)
                        history.go(0);
            });
    function getNode(ele){
        var array = ele.childNodes;
        for(var i = 0;i < array.length;i++){
            var childNode = array[i];
            if(childNode.nodeType == 1){
                getNode(childNode);
            }else if(childNode.nodeType == 3){
                var textContent=childNode.textContent;
                if(reg.test(String(textContent))){
                    if(exclude.get(childNode.parentElement.tagName)===1){
                        return;
                    }
                    let newTextContent=textContent.replace(reg,function(arg1,arg2,arg3,arg4){
                        let textContent='<a href="'+arg1+'" '+styleStr+' target="_blank">'+arg1+'</a>'
                        return textContent;
                    })
                    childNode.parentElement.innerHTML=newTextContent;
                    if(GM_getValue('transformation_count')==undefined){
                        GM_setValue('transformation_count', 1);
                    }else{
                        GM_setValue('transformation_count', GM_getValue('transformation_count')+1);
                    }
                }
            }
        }
    }
    console.log(href);
    window.onload = function() {
       setTimeout(()=>{
           var nodes = document.body;
           getNode(nodes);
           setInterval(function () {
               var newHref = window.location.href;
               if (newHref!==href) {
                   href=newHref;
                   setTimeout(()=>{
                       nodes = document.body;
                       getNode(nodes);
                   },500);
               }
           }, 500);
       },2000);
    }
})();