diff --git a/script/urlConfig.ts b/script/urlConfig.ts new file mode 100644 index 0000000..2256038 --- /dev/null +++ b/script/urlConfig.ts @@ -0,0 +1,42 @@ +import { siteList } from "../src/utils/siteList"; + +const cleanUrl = (url: string): string => { + return url.replace(/^(https?:\/\/)?(www\.)?/, ""); +}; + +const getLibMirror = async () => { + const user = "javlibcom"; + const res = await fetch(`https://api.github.com/users/${user}`); + const data = (await res.json()) || {}; + return cleanUrl(data.blog ?? ""); +}; + +const getDbMirror = async () => { + const res = await fetch(`https://javdb.com/`); + const htmlText = await res.text(); + + const navMatch = htmlText.match(/]*class="[^"]*sub-header[^"]*"[^>]*>([\s\S]*?)<\/nav>/i); + if (!navMatch) return []; + + const hrefRegex = /href="([^"]+)"/g; + return [...navMatch[1].matchAll(hrefRegex)].map((match) => cleanUrl(match[1])).filter(Boolean); +}; + +const libMirrorUrl = await getLibMirror(); +const dbMirrorUrls = await getDbMirror(); + +const connectList = siteList.map((site) => site.hostname); + +const includeList = [ + /^https?:\/\/(\w*\.)?javdb(\d)*\.com\/v.*$/, + /^https?:\/\/(\w*\.)?(javbus|seejav|javsee)*\.(com|cc|me|life|bid).*$/, + /^https?:\/\/(\w*\.)?javlibrary\.com.*$/, + /^http.*\/cn\/\?v=jav.*$/, +]; + +const mirrorList = [...dbMirrorUrls, libMirrorUrl]; +export default { + match: [...mirrorList], + connect: connectList, + include: includeList, +}; diff --git a/src/main.tsx b/src/main.tsx index c147f8d..ea041a5 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -11,9 +11,9 @@ if (!import.meta.env.PROD) { function main() { /** 当前匹配的图书馆站点对象 */ - const libItem = libSites.find((item) => item.href.test(window.location.href)); + const libItem = libSites.find((item) => document.querySelector(item.identifier)); if (!libItem) { - console.error("||脚本挂载错误"); + console.error("||jop 匹配站点失败"); return; } const CODE = getCode(libItem); @@ -23,7 +23,7 @@ function main() { const panel = document.querySelector(libItem.querys.panelQueryStr); if (!panel) { - console.error("||脚本挂载错误"); + console.error("||jop 插入界面失败"); return; } diff --git a/src/utils/libSites.ts b/src/utils/libSites.ts index db5daf1..222e33f 100644 --- a/src/utils/libSites.ts +++ b/src/utils/libSites.ts @@ -2,7 +2,7 @@ export type LibItem = { name: "javdb" | "javbus" | "javlib"; enable: boolean; - href: RegExp; + identifier: string; querys: { panelQueryStr: string; codeQueryStr: string; @@ -15,7 +15,7 @@ export const libSites: LibItem[] = [ { name: "javdb", enable: true, - href: /^https?:\/\/(\w*\.)?javdb(\d)*\.com\/v.*$/, + identifier: "a[href*='javdb']", querys: { panelQueryStr: ".video-meta-panel>.columns.is-desktop .panel.movie-panel-info", codeQueryStr: `[data-clipboard-text]`, @@ -35,7 +35,7 @@ export const libSites: LibItem[] = [ { name: "javbus", enable: true, - href: /^https?:\/\/(\w*\.)?(javbus|seejav|javsee)*\.(com|cc|me|life|bid).*$/, + identifier: "a[href*='javbus']", querys: { panelQueryStr: ".movie>div.info", codeQueryStr: `span[style="color:#CC0000;"]`, @@ -45,7 +45,7 @@ export const libSites: LibItem[] = [ { name: "javlib", enable: true, - href: /^http.*\/cn\/\?v=jav.*$/, + identifier: "img[src*='logo-top']", querys: { panelQueryStr: "#video_jacket_info #video_info", codeQueryStr: `#video_id td.text`, diff --git a/vite.config.ts b/vite.config.ts index b7ec4d1..8a84990 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,14 +1,7 @@ import { defineConfig } from "vite"; import monkey, { cdn, MonkeyUserScript } from "vite-plugin-monkey"; import preact from "@preact/preset-vite"; -import { siteList } from "./src/utils/siteList"; -import { libSites } from "./src/utils/libSites"; - -const connectList = siteList - .map((site) => site.hostname) - .concat(["javdb368.com", "javdb369.com", "g64w.com"]); - -const includeList = libSites.map((libItem) => libItem.href); +import urlConfig from "./script/urlConfig"; const PARALLEL = "https://raw.githubusercontent.com/Tampermonkey/utils/refs/heads/main/requires/gh_2215_make_GM_xhr_more_parallel_again.js"; @@ -18,12 +11,10 @@ const UserscriptConfig: MonkeyUserScript = { version: "1.2.5", license: "MIT", name: "JAV 添加跳转在线观看", - // match: ["*://*/cn/?v=jav*"], - include: includeList, icon: "https://javdb.com/favicon-32x32.png", namespace: "https://greasyfork.org/zh-CN/scripts/429173", description: "为 JavDB、JavBus、JavLibrary 这三个站点添加跳转在线观看的链接", - connect: connectList, + ...urlConfig, require: [PARALLEL], };