将#东、B站、淘宝、天猫、微博、知乎、豆瓣手机版网页转换为PC版网页
// ==UserScript== // @name 将手机版网页转换为PC版网页 // @namespace none // @version 1.1 // @description 将#东、B站、淘宝、天猫、微博、知乎、豆瓣手机版网页转换为PC版网页 // @author owovo // @match *://item.m.jd.com/* // @match *://www.bilibili.com/mobile/video/* // @match *://detail.m.tmall.com/* // @match *://h5.m.taobao.com/* // @match *://shop.m.jd.com/* // @match *://m.weibo.cn/* // @match *://zhuanlan.zhihu.com/p/* // @match *://www.zhihu.com/question/* // @match *://m.douban.com/* // @grant none // ==/UserScript== (function() { 'use strict'; // URL转换规则配置 const urlRules = [ { // #东商品详情页 regex: /^https?:\/\/item\.m\.jd\.com\/(?:product\/(\d+)|detail\/(\d+))\.html(?:[\?#].*)?$/, replace: (match, p1, p2) => `https://item.jd.com/${p1 || p2}.html`, description: "#东商品详情页转换(product/ 或 detail/ 路径)" }, { regex: /^https?:\/\/item\.m\.jd\.com\/ware\/view\.action\?.*wareId=(\d+).*$/, replace: 'https://item.jd.com/$1.html', description: "#东商品详情页转换(wareId 参数)" }, { // #东店铺首页 regex: /^https?:\/\/shop\.m\.jd\.com\/shop\/home\/(\w+)\.html$/, replace: 'https://shop.jd.com/home/popup/shopHome.html?id=$1', description: "#东店铺首页转换" }, { // 哔哩哔哩 regex: /^https?:\/\/www\.bilibili\.com\/mobile\/video\/(av\d+|bv\w+)\.html$/, replace: 'https://www.bilibili.com/video/$1/', description: "哔哩哔哩视频页转换(支持 av 号和 bv 号)" }, { // 天猫 regex: /^https?:\/\/detail\.m\.tmall\.com\/item\.htm\?(.*)$/, replace: (match, params) => { try { const id = new URLSearchParams(params).get('id'); return id && `https://detail.tmall.com/item.htm?id=${id}`; } catch (error) { return null; } }, description: "天猫商品详情页转换(使用 URLSearchParams 处理参数)" }, { // 淘宝 regex: /^https?:\/\/h5\.m\.taobao\.com\/awp\/core\/detail\.htm\?(.*)$/, replace: (match, params) => { try { const id = new URLSearchParams(params).get('id'); return id && `https://item.taobao.com/item.htm?id=${id}`; } catch (error) { return null; } }, description: "淘宝商品详情页转换(使用 URLSearchParams 处理参数)" }, { // ##微博 regex: /^https?:\/\/m\.weibo\.cn\/(.*)$/, replace: 'https://weibo.com/$1', description: "##微博转换" }, { // 知乎(文章) regex: /^https?:\/\/zhuanlan\.zhihu\.com\/p\/(.*)$/, replace: 'https://zhuanlan.zhihu.com/p/$1', description: "知乎文章转换" }, { // 知乎(问题) regex: /^https?:\/\/www\.zhihu\.com\/question\/(\d+)(\/.*)?$/, replace: (match, questionId, subPath) => { // 保留子路径(如 /answer/123456) return `https://www.zhihu.com/question/${questionId}${subPath || ''}`; }, description: "知乎问题转换(保留子路径)" }, { // 豆瓣 regex: /^https?:\/\/m\.douban\.com\/(.*)$/, replace: 'https://www.douban.com/$1', description: "豆瓣转换" } ]; // 工具函数 const utils = { isValidUrl: (url) => { try { new URL(url); return true; } catch (e) { return false; } }, safeReplaceUrl: (url, regex, replace) => { try { const newUrl = typeof replace === 'function' ? url.replace(regex, replace) : url.replace(regex, replace); return utils.isValidUrl(newUrl) ? newUrl : null; } catch (e) { return null; } } }; // 主逻辑 try { const currentUrl = window.location.href; const matchedRule = urlRules.find(rule => { const { regex, replace } = rule; const newUrl = utils.safeReplaceUrl(currentUrl, regex, replace); if (newUrl && newUrl !== currentUrl) { window.location.replace(newUrl); return true; } return false; }); } catch (e) { console.error('URL conversion failed'); } })();