您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Convert plain text URLs and domain names (even missing "h" for http/https) into clickable links
当前为
// ==UserScript== // @name Convert Any links to Clickable Links // @namespace kdroidwin.hatenablog.com/ // @version 1.1 // @description Convert plain text URLs and domain names (even missing "h" for http/https) into clickable links // @author Kdroidwin // @match *://*/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; function convertTextToLinks() { // 正規表現パターンを更新: "h" がない場合や "http(s)://" の場合も対象にする // この例では先頭が "h?ttps?://" を探すことで、"h" がない場合にもマッチする const pattern = /(h?ttps?:\/\/[^\s]+|(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,})/g; const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, { acceptNode: node => { // この部分も正規表現を更新(元のコードとほぼ同じですが、patternを使用) if (node.parentNode && node.parentNode.tagName !== 'A' && pattern.test(node.nodeValue)) { return NodeFilter.FILTER_ACCEPT; } return NodeFilter.FILTER_REJECT; } }); let nodes = []; while (walker.nextNode()) { nodes.push(walker.currentNode); } nodes.forEach(node => { const fragment = document.createDocumentFragment(); // 改良:正規表現のキャプチャを利用して分割(splitはキャプチャも含むのでOK) const parts = node.nodeValue.split(pattern); parts.forEach(part => { // "ttps://" で始まる場合には先頭に"h"を補給 if (/^ttps:\/\//i.test(part)) { const link = document.createElement('a'); link.href = 'h' + part; link.textContent = part; link.target = '_blank'; fragment.appendChild(link); // "http://" または "https://" で始まる場合 } else if (/^https?:\/\//i.test(part)) { const link = document.createElement('a'); link.href = part; link.textContent = part; link.target = '_blank'; fragment.appendChild(link); // ドメインパターン } else if (/(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}/.test(part)) { const link = document.createElement('a'); link.href = 'https://' + part; link.textContent = part; link.target = '_blank'; fragment.appendChild(link); } else { fragment.appendChild(document.createTextNode(part)); } }); node.parentNode.replaceChild(fragment, node); }); } convertTextToLinks(); new MutationObserver(convertTextToLinks).observe(document.body, { childList: true, subtree: true }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址