您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动将网址中的"automagic4android.com"替换为"46.231.200.187",高性能优化版
// ==UserScript== // @name Automagic网址自动替换 - 高性能版 // @namespace http://tampermonkey.net/ // @version 2.1 // @description 自动将网址中的"automagic4android.com"替换为"46.231.200.187",高性能优化版 // @author Jeff_CF // @icon https://46.231.200.187/images/AutomagicAdaptiveIcon_25.png // @match *://46.231.200.187/* // @match *://automagic4android.com/* // @match *://www.baidu.com/* // @match *://*/* // @grant none // ==/UserScript== (function() { 'use strict'; // 目标域名和替换IP const OLD_DOMAIN = 'automagic4android.com'; const NEW_IP = '46.231.200.187'; // 需要处理的属性列表 const URL_ATTRIBUTES = ['href', 'src', 'action']; // 防抖计时器 let processTimer = null; // 安全替换URL - 仅替换域名部分 function replaceUrl(url) { try { const urlObj = new URL(url); if (urlObj.hostname === OLD_DOMAIN) { urlObj.hostname = NEW_IP; return urlObj.toString(); } } catch (e) { // 无效URL则直接替换字符串 return url.replace(OLD_DOMAIN, NEW_IP); } return url; } // 处理单个元素 function processElement(element) { URL_ATTRIBUTES.forEach(attr => { const value = element.getAttribute(attr); if (value && value.includes(OLD_DOMAIN)) { element.setAttribute(attr, replaceUrl(value)); } }); } // 初始页面处理(使用高效的选择器) function processPage() { // 创建高效的选择器(匹配任何包含目标域名的属性) const selector = URL_ATTRIBUTES.map(attr => `[${attr}*="${OLD_DOMAIN}"]`).join(','); if (!selector) return; const elements = document.querySelectorAll(selector); for (let i = 0; i < elements.length; i++) { processElement(elements[i]); } } // 高性能处理DOM变化 function handleMutations(mutations) { // 使用Set避免重复处理 const elementsToProcess = new Set(); for (const mutation of mutations) { // 处理新增节点 if (mutation.addedNodes) { for (const node of mutation.addedNodes) { if (node.nodeType === Node.ELEMENT_NODE) { // 检查节点本身 if (node.matches(`[href*="${OLD_DOMAIN}"], [src*="${OLD_DOMAIN}"], [action*="${OLD_DOMAIN}"]`)) { elementsToProcess.add(node); } // 检查直接子节点(避免深层遍历) for (const child of node.children) { if (child.matches(`[href*="${OLD_DOMAIN}"], [src*="${OLD_DOMAIN}"], [action*="${OLD_DOMAIN}"]`)) { elementsToProcess.add(child); } } } } } // 处理属性变化 if (mutation.type === 'attributes' && URL_ATTRIBUTES.includes(mutation.attributeName) && mutation.target instanceof Element && mutation.target.matches(`[${mutation.attributeName}*="${OLD_DOMAIN}"]`)) { elementsToProcess.add(mutation.target); } } // 处理收集到的元素 for (const element of elementsToProcess) { processElement(element); } } // 使用防抖的MutationObserver回调 function debouncedMutationCallback(mutations) { if (processTimer) clearTimeout(processTimer); // 对百度等高性能敏感页面使用更长的延迟 const delay = window.location.hostname.includes('baidu.com') ? 300 : 100; processTimer = setTimeout(() => { handleMutations(mutations); processTimer = null; }, delay); } // 初始化观察器 function initObserver() { const observer = new MutationObserver(debouncedMutationCallback); observer.observe(document, { childList: true, subtree: true, attributes: true, attributeFilter: URL_ATTRIBUTES }); return observer; } // 主初始化函数 function init() { // 初始页面处理 processPage(); // 初始化观察器 initObserver(); // 对百度页面添加性能优化提示 if (window.location.hostname.includes('baidu.com')) { console.log('Automagic网址替换脚本已启用(百度优化模式)'); } } // 在页面完全加载后初始化 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();