- // ==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');
- }
- })();