diff --git a/src/libs/injector.js b/src/libs/injector.js index 5d7b75d..0209191 100644 --- a/src/libs/injector.js +++ b/src/libs/injector.js @@ -7,6 +7,7 @@ export const injectInlineJs = (code, id = "kiss-translator-inline-js") => { } const el = document.createElement("script"); + el.setAttribute("data-source", "kiss-inject injectInlineJs"); el.type = "text/javascript"; el.id = id; el.textContent = trustedTypesHelper.createScript(code); @@ -19,6 +20,7 @@ export const injectInlineJsBg = (code, id = "kiss-translator-inline-js") => { } const el = document.createElement("script"); + el.setAttribute("data-source", "kiss-inject injectInlineJsBg"); el.type = "text/javascript"; el.id = id; el.textContent = code; @@ -32,6 +34,7 @@ export const injectExternalJs = (src, id = "kiss-translator-external-js") => { } const el = document.createElement("script"); + el.setAttribute("data-source", "kiss-inject injectExternalJs"); el.type = "text/javascript"; el.id = id; el.src = trustedTypesHelper.createScriptURL(src); diff --git a/src/libs/inputTranslate.js b/src/libs/inputTranslate.js index a475007..f86f1b2 100644 --- a/src/libs/inputTranslate.js +++ b/src/libs/inputTranslate.js @@ -11,7 +11,10 @@ import { createLoadingSVG } from "./svg"; import { logger } from "./log"; function isInputNode(node) { - return node.nodeName === "INPUT" || node.nodeName === "TEXTAREA"; + return ( + node.nodeName?.toUpperCase() === "INPUT" || + node.nodeName?.toUpperCase() === "TEXTAREA" + ); } function isEditAbleNode(node) { diff --git a/src/libs/translator.js b/src/libs/translator.js index f7320af..b7e60de 100644 --- a/src/libs/translator.js +++ b/src/libs/translator.js @@ -1,5 +1,4 @@ import { - APP_UPNAME, APP_LCNAME, APP_CONSTS, OPT_STYLE_FUZZY, @@ -153,7 +152,7 @@ export class Translator { // 译文相关class static KISS_CLASS = { - warpper: `${APP_LCNAME}-wrapper notranslate`, + warpper: `${APP_LCNAME}-wrapper`, inner: `${APP_LCNAME}-inner`, term: `${APP_LCNAME}-term`, br: `${APP_LCNAME}-br`, @@ -224,8 +223,8 @@ export class Translator { static isBlockNode(el) { if (!Translator.isElementOrFragment(el)) return false; - if (Translator.TAGS.INLINE.has(el.nodeName)) return false; - if (Translator.TAGS.BLOCK.has(el.nodeName)) return true; + if (Translator.TAGS.INLINE.has(el.nodeName?.toUpperCase())) return false; + if (Translator.TAGS.BLOCK.has(el.nodeName?.toUpperCase())) return true; if (el.attributes?.display?.value?.includes("inline")) return false; if (Translator.displayCache.has(el)) { @@ -265,7 +264,7 @@ export class Translator { } // 内置忽略元素 - static KISS_IGNORE_SELECTOR = `${APP_LCNAME}, .kiss-caption-container, .kiss-subtitle-controls + static KISS_IGNORE_SELECTOR = `.${Translator.KISS_CLASS.warpper}, .kiss-caption-container, .kiss-subtitle-controls #${APP_CONSTS.fabID}, .${APP_CONSTS.fabID}_warpper, #${APP_CONSTS.boxID}, .${APP_CONSTS.boxID}_warpper, #${APP_CONSTS.popupID}, .${APP_CONSTS.popupID}_warpper`; @@ -288,7 +287,7 @@ export class Translator { #combinedTermsRegex; // 专业术语正则表达式 #combinedSkipsRegex; // 跳过文本正则表达式 #placeholderRegex; // 恢复htnml正则表达式 - #translationTagName = APP_UPNAME; // 翻译容器的标签名 + #translationTagName = APP_LCNAME; // 翻译容器的标签名 #eventName = ""; // 通信事件名称 #docInfo = {}; // 网页信息 #glossary = {}; // AI词典 @@ -602,7 +601,8 @@ export class Translator { for (const mutation of mutations) { if ( this.#skipMoNodes.has(mutation.target) || - mutation.nextSibling?.tagName === this.#translationTagName + mutation.nextSibling?.tagName?.toLowerCase() === + this.#translationTagName ) { continue; } @@ -620,7 +620,7 @@ export class Translator { mutation.addedNodes.forEach((node) => { if ( this.#skipMoNodes.has(node) || - node.nodeName === this.#translationTagName + node.nodeName?.toLowerCase() === this.#translationTagName ) { return; } @@ -1056,7 +1056,10 @@ export class Translator { textLength += node.textContent.length; const isSentenceEnd = sentenceEndRegexForTest.test(node.textContent); - if (!isSentenceEnd || node.nextSibling?.nodeName === "BR") { + if ( + !isSentenceEnd || + node.nextSibling?.nodeName?.toUpperCase() === "BR" + ) { return; } @@ -1109,9 +1112,9 @@ export class Translator { if (node.matches(this.#rule.keepSelector)) return false; if ( - Translator.TAGS.BREAK_LINE.has(node.nodeName) || + Translator.TAGS.BREAK_LINE.has(node.nodeName?.toUpperCase()) || node.matches?.(this.#ignoreSelector) || - node.nodeName === this.#translationTagName + node.nodeName?.toLowerCase() === this.#translationTagName ) { return true; } @@ -1194,11 +1197,10 @@ export class Translator { nodes, termsStyle ); - // console.log("processedString", processedString); if (this.#isInvalidText(processedString)) return; const wrapper = document.createElement(this.#translationTagName); - wrapper.className = Translator.KISS_CLASS.warpper; + wrapper.className = `${Translator.KISS_CLASS.warpper} notranslate`; if (processedString.length > newlineLength) { const br = document.createElement("br"); @@ -1443,7 +1445,9 @@ export class Translator { // 查找指定节点下所有译文节点 #findTranslationWrappers(parentNode) { - return parentNode.querySelectorAll(`:scope > ${APP_LCNAME}`); + return parentNode.querySelectorAll( + `:scope > .${Translator.KISS_CLASS.warpper}` + ); } // 清理所有插入的译文dom @@ -1454,7 +1458,7 @@ export class Translator { // 清理节点下面所有译文dom #cleanupAllTranslations(root) { root - .querySelectorAll(APP_LCNAME) + .querySelectorAll(`.${Translator.KISS_CLASS.warpper}`) .forEach((el) => this.#removeTranslationElement(el)); } diff --git a/src/libs/translatorManager.js b/src/libs/translatorManager.js index f1610fd..b999167 100644 --- a/src/libs/translatorManager.js +++ b/src/libs/translatorManager.js @@ -252,6 +252,8 @@ export default class TranslatorManager { sendIframeMsg(action, args); } + logger.debug("process action:", action, args); + switch (action) { case MSG_TRANS_TOGGLE: this._translator.toggle();