// ==UserScript== // @name 网址纠错 // @namespace https://xiaote.data.blog/wzjc // @version 1.4 // @description 在您访问了错误的网址时提示您,并可设置白名单和删除白名单 // @author xiaote_XT // @match *://*/* // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @grant GM_registerMenuCommand //https://update.greasyfork.org/scripts/523856/%E7%BD%91%E5%9D%80%E7%BA%A0%E9%94%99.meta.js // ==/UserScript== var text1 = "您可能想要访问的网址可能是"; var text2 = ",是否需要跳转至推荐网址?"; //设置界面-头 (function() { 'use strict'; // 从存储中获取白名单,如果没有则默认为空数组 let whitelist = loadWhitelist(); // 注册一个菜单命令,用于打开设置界面 GM_registerMenuCommand("网址纠错白名单设置", openSettings); function loadWhitelist() { let storedWhitelist = GM_getValue('whitelist', '[]'); console.log('Loaded whitelist:', storedWhitelist); return JSON.parse(storedWhitelist); } function saveWhitelist() { let whitelistString = JSON.stringify(whitelist); console.log('Saving whitelist:', whitelistString); GM_setValue('whitelist', whitelistString); } function openSettings() { // 创建一个包含设置界面的 div 元素 let settingsDiv = document.createElement('div'); settingsDiv.id = 'urlCorrectionSettings'; settingsDiv.style.position = 'fixed'; settingsDiv.style.top = '50%'; settingsDiv.style.left = '50%'; settingsDiv.style.transform = 'translate(-50%, -50%)'; settingsDiv.style.backgroundColor = 'white'; settingsDiv.style.padding = '20px'; settingsDiv.style.border = '1px solid black'; settingsDiv.style.zIndex = '9999';//层级设置,确保在最高层 // 创建输入框和按钮元素 let html = `

网址纠错白名单设置

操作说明

输入:点击“添加白名单网址:”后空白处可输入内容
添加:点击“添加”添加至白名单(添加后需要点“保存”)
保存:点击“保存”保存修改后的白名单
取消:点击“取消”不执行任何修改并关闭此窗口
删除:点击对应网址后的“删除”删除对应网址

当前白名单:

`; settingsDiv.innerHTML = html; // 填充当前白名单列表 let whitelistList = settingsDiv.querySelector('#whitelistList'); for (let url of whitelist) { let listItem = document.createElement('li'); listItem.textContent = url; listItem.innerHTML += ` `; whitelistList.appendChild(listItem); } // 添加样式 GM_addStyle(` #urlCorrectionSettings input, #urlCorrectionSettings button { margin: 5px; } #urlCorrectionSettings ul { list-style-type: none; padding: 0; } .removeButton { margin-left: 10px; } `); // 添加按钮点击事件 settingsDiv.querySelector('#addButton').addEventListener('click', () => { let input = settingsDiv.querySelector('#whitelistInput'); let url = input.value; if (url) { whitelist.push(url); let listItem = document.createElement('li'); listItem.textContent = url; listItem.innerHTML += ` `; whitelistList.appendChild(listItem); input.value = ''; saveWhitelist(); // 保存白名单 } }); settingsDiv.querySelector('#saveButton').addEventListener('click', () => { saveWhitelist(); closeSettings(); }); settingsDiv.querySelector('#cancelButton').addEventListener('click', () => { closeSettings(); }); // 为删除按钮添加事件监听 settingsDiv.querySelectorAll('.removeButton').forEach(button => { button.addEventListener('click', () => { let listItem = button.parentNode; let url = listItem.textContent.replace('删除', '').trim(); let index = whitelist.indexOf(url); if (index > -1) { whitelist.splice(index, 1); listItem.remove(); saveWhitelist(); alert("删除成功") } }); }); // 将设置界面添加到页面 document.body.appendChild(settingsDiv); } function closeSettings() { let settingsDiv = document.getElementById('urlCorrectionSettings'); if (settingsDiv) { document.body.removeChild(settingsDiv); } } //设置界面-尾 // 使用对象存储错误网址和对应的正确网址 let urlMap = { "bilibil.com": "https://bilibili.com",//b站 "douying.com": "https://douyin.com",//抖音 "baidv.com": "https://baidu.com",//百度 "alibaba.com": "https://taobao.com",//阿里巴巴海外版转至淘宝 "ta0bao.com": "https://taobao.com",//淘宝 "1668.com": "https://1688.com",//阿里1688 "sinq.com.cn": "https://sina.com.cn",//新浪网 "168.com": "https://163.com",//网易 "jdl.cn": "https://jd.com",//京东 "wei6o.com": "https://weibo.com",//微博 "iqiy1.com": "https://iqiyi.com",//爱奇艺 //qq.com诱导性网站字典 "v.qqq.com": "https://v.qq.com", "360123.com": "https://qq.com", "lo1.qq.com": "https://lol.qq.com", "pvp.qqq.com": "https://pvp.qq.com", "mp.weix1n.qq.com": "https://mp.weixin.qq.com", "qzoen.qq.com": "https://qzone.qq.com", "qql.com": "https://qq.com", // "youk1.com": "https://youku.com",//优酷 "ba1du.com": "https://baidu.com",//百度 "sogov.com": "https://sogou.com",//搜狗 "sougou.com": "https://sogou.com",//搜狗 "soo.com": "https://so.com",//360搜索 "163.com/gamez": "https://163.com/games",//网易 "www.icbc1.com.cn": "https://www.icbc.com.cn",//工商银行 "www.cmbch1na.com": "https://www.cmbchina.com",//招商银行 "www.al1pay.com": "https://www.alipay.com",//支付宝 "59.com": "https://58.com",//58同城 "ctripp.com": "https://ctrip.com",//携程旅行 "www.dianp1ng.com": "https://www.dianping.com",//大众点评 "wenku.ba1du.com": "https://wenku.baidu.com",//百度文库 "blog.csd1.net": "https://blog.csdn.net",//流氓博客 "zhih1.com": "https://zhihu.com",//知乎 "tout1ao.com": "https://toutiao.com",//头条 "lfeng.com": "https://ifeng.com",//凤凰网 "thepaperr.cn": "https://thepaper.cn",//澎湃新闻 "xiaote.com": "https://xiaote.data.blog",//小特网 //Chrome诱导性网站字典 "chrome.zuitie.cn": "https://www.google.cn/intl/zh-CN/chrome/", "www.chrome.net.cn": "https://www.google.cn/intl/zh-CN/chrome/", "http://chrome.stywru.cn/": "https://www.google.cn/intl/zh-CN/chrome/", "https://www.bear20.com/window/4211/472030921.html?f=bdj_695886": "https://www.google.cn/intl/zh-CN/chrome/", "https://chrome.cmrrs.com/": "https://www.google.cn/intl/zh-CN/chrome/", "https://baoku.360.cn/sinfo/104384025_4002818.html": "https://www.google.cn/intl/zh-CN/chrome/", "https://chromcn.cn/": "https://www.google.cn/intl/zh-CN/chrome/", "https://chrome.softbd.cn/": "https://www.google.cn/intl/zh-CN/chrome/", "http://soft.wxxznkj.cn/": "https://www.google.cn/intl/zh-CN/chrome/", "https://soft7.ydxiazai.com/pcgame/fps/764276.html": "https://www.google.cn/intl/zh-CN/chrome/", "https://sem.duba.net/sem/childbd/f336.html?sfrom=196&keyID=000017&TFT=3&msclkid=94b7b1bd86061e331528d6343bdc9af2": "https://www.google.cn/intl/zh-CN/chrome/", //可能需要访问Chrome下载地址的网址 "https://cn.bing.com/search?q=%E8%B0%B7%E6%AD%8C%E6%B5%8F%E8%A7%88%E5%99%A8": "https://www.google.cn/intl/zh-CN/chrome/", "https://www.pcsoft.com.cn/article/61837.html": "https://www.google.cn/intl/zh-CN/chrome/", // "91.com": "https://xiaote.data.blog", "91.com": "https://xiaote.data.blog", "91.com": "https://xiaote.data.blog", "91.com": "https://xiaote.data.blog" // 可以继续添加更多的键值对 }; // 从 sessionStorage 中获取 hasCancelled 的状态,如果不存在则默认为 false let hasCancelled = sessionStorage.getItem('hasCancelled') === 'true'; function checkAndCorrectUrl() { let currentUrl = window.location.href; for (let wrongUrl in urlMap) { let correctUrl = urlMap[wrongUrl]; let currentUrlObj = new URL(currentUrl); let isInWhitelist = false; for (let whiteUrl of whitelist) { if (new URL(whiteUrl).href === currentUrlObj.href) { isInWhitelist = true; break; } } if (currentUrl.includes(wrongUrl) &&!hasCancelled &&!isInWhitelist) { if (confirm(`${text1} ${correctUrl}${text2}`)) { window.location.href = correctUrl; } else { hasCancelled = true; sessionStorage.setItem('hasCancelled', 'true'); } } } } checkAndCorrectUrl(); })();