From 748f2002ab8708ca4dd8092aca4f54b1a16c9ce4 Mon Sep 17 00:00:00 2001 From: Gabe Yuan Date: Wed, 27 Dec 2023 15:44:02 +0800 Subject: [PATCH] fix: run webfix before translate --- src/common.js | 6 +++--- src/libs/translator.js | 10 +++++++++- src/libs/webfix.js | 34 ++++++++++++++++++++++------------ 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/common.js b/src/common.js index 778880a..8a49c93 100644 --- a/src/common.js +++ b/src/common.js @@ -20,7 +20,7 @@ import { touchTapListener } from "./libs/touch"; import { debounce, genEventName } from "./libs/utils"; import { handlePing, injectScript } from "./libs/gm"; import { browser } from "./libs/browser"; -import { runWebfix } from "./libs/webfix"; +import { matchFixer } from "./libs/webfix"; import { matchRule } from "./libs/rules"; import { trySyncAllSubRules } from "./libs/subRules"; import { isInBlacklist } from "./libs/blacklist"; @@ -252,11 +252,11 @@ export async function run(isUserscript = false) { } // 不规范网页修复 - await runWebfix(setting); + const fixerSetting = await matchFixer(href, setting); // 翻译网页 const rule = await matchRule(href, setting); - const translator = new Translator(rule, setting); + const translator = new Translator(rule, setting, fixerSetting); // 监听消息 windowListener(rule); diff --git a/src/libs/translator.js b/src/libs/translator.js index 37c5055..05f2fac 100644 --- a/src/libs/translator.js +++ b/src/libs/translator.js @@ -13,6 +13,7 @@ import { import Content from "../views/Content"; import { updateFetchPool, clearFetchPool } from "./fetch"; import { debounce, genEventName } from "./utils"; +import { runFixer } from "./webfix"; /** * 翻译类 @@ -20,6 +21,7 @@ import { debounce, genEventName } from "./utils"; export class Translator { _rule = {}; _setting = {}; + _fixerSetting = null; _rootNodes = new Set(); _tranNodes = new Map(); _skipNodeNames = [ @@ -91,13 +93,14 @@ export class Translator { }; }; - constructor(rule, setting) { + constructor(rule, setting, fixerSetting) { const { fetchInterval, fetchLimit } = setting; updateFetchPool(fetchInterval, fetchLimit); this._overrideAttachShadow(); this._setting = setting; this._rule = rule; + this._fixerSetting = fixerSetting; if (rule.transOpen === "true") { this._register(); @@ -235,6 +238,11 @@ export class Translator { return; } + // webfix + if (this._fixerSetting) { + runFixer(this._fixerSetting); + } + // 搜索节点 this._queryNodes(); diff --git a/src/libs/webfix.js b/src/libs/webfix.js index a82d64b..5cfe2c6 100644 --- a/src/libs/webfix.js +++ b/src/libs/webfix.js @@ -218,28 +218,38 @@ export const loadOrFetchWebfix = async (url) => { }; /** - * 匹配站点 + * 执行fixer + * @param {*} param0 */ -export async function runWebfix({ injectWebfix }) { +export async function runFixer({ selector, fixer, rootSelector }) { try { - if (!injectWebfix) { - return; - } + run(selector, fixerMap[fixer], rootSelector); + } catch (err) { + console.error(`[kiss-webfix run]: ${err.message}`); + } +} - const href = document.location.href; +/** + * 匹配fixer配置 + */ +export async function matchFixer(href, { injectWebfix }) { + if (!injectWebfix) { + return null; + } + + try { const userSites = await getWebfixRulesWithDefault(); const subSites = await loadOrFetchWebfix(process.env.REACT_APP_WEBFIXURL); const sites = [...userSites, ...subSites]; for (var i = 0; i < sites.length; i++) { var site = sites[i]; - if (isMatch(href, site.pattern)) { - if (fixerMap[site.fixer]) { - run(site.selector, fixerMap[site.fixer], site.rootSelector); - } - break; + if (isMatch(href, site.pattern) && fixerMap[site.fixer]) { + return site; } } } catch (err) { - console.error(`[kiss-webfix]: ${err.message}`); + console.error(`[kiss-webfix match]: ${err.message}`); } + + return null; }