diff --git a/entrypoints/main/dom.ts b/entrypoints/main/dom.ts index 5805fd3..93e9664 100644 --- a/entrypoints/main/dom.ts +++ b/entrypoints/main/dom.ts @@ -33,7 +33,11 @@ export function grabAllNode(rootNode: Node): Element[] { NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, { acceptNode: (node: Node): number => { - if (node instanceof Text) return NodeFilter.FILTER_ACCEPT; + if (node instanceof Text) { + // 检查文本节点是否有实际内容(去除空白后) + const textContent = node.textContent?.replace(/[\s\u3000]/g, '') || ''; + return textContent.length > 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; + } if (!(node instanceof Element)) return NodeFilter.FILTER_SKIP; @@ -59,13 +63,17 @@ export function grabAllNode(rootNode: Node): Element[] { for (const child of node.childNodes) { if (child.nodeType === Node.ELEMENT_NODE) { hasElement = true; - // 检查子元素是否包含文本 - if (child.textContent?.trim()) { + // 检查子元素是否包含文本(去除空白后) + const childText = child.textContent?.replace(/[\s\u3000]/g, '') || ''; + if (childText.length > 0) { hasNonEmptyElement = true; } } - if (child.nodeType === Node.TEXT_NODE && child.textContent?.trim()) { - hasText = true; + if (child.nodeType === Node.TEXT_NODE) { + const textContent = child.textContent?.replace(/[\s\u3000]/g, '') || ''; + if (textContent.length > 0) { + hasText = true; + } } } diff --git a/entrypoints/main/trans.ts b/entrypoints/main/trans.ts index a7dc91d..3a0570d 100644 --- a/entrypoints/main/trans.ts +++ b/entrypoints/main/trans.ts @@ -252,7 +252,9 @@ export function handleSingleTranslation(node: any, slide: boolean) { function bilingualTranslate(node: any, nodeOuterHTML: any) { - if (detectlang(node.textContent.replace(/[\s\u3000]/g, '')) === config.to) return; + const cleanedText = node.textContent.replace(/[\s\u3000]/g, ''); + if (!cleanedText || cleanedText.length === 0) return; + if (detectlang(cleanedText) === config.to) return; let origin = node.textContent; let spinner = insertLoadingSpinner(node); @@ -272,7 +274,9 @@ function bilingualTranslate(node: any, nodeOuterHTML: any) { export function singleTranslate(node: any) { - if (detectlang(node.textContent.replace(/[\s\u3000]/g, '')) === config.to) return; + const cleanedText = node.textContent.replace(/[\s\u3000]/g, ''); + if (!cleanedText || cleanedText.length === 0) return; + if (detectlang(cleanedText) === config.to) return; let origin = servicesType.isMachine(config.service) ? node.innerHTML : LLMStandardHTML(node); let spinner = insertLoadingSpinner(node); diff --git a/entrypoints/utils/translateApi.ts b/entrypoints/utils/translateApi.ts index 6bd2526..d32b43b 100644 --- a/entrypoints/utils/translateApi.ts +++ b/entrypoints/utils/translateApi.ts @@ -30,6 +30,12 @@ export async function translateText(origin: string, context: string = document.t useCache = config.useCache, } = options; + // 检查 origin 是否为空或只有空白字符 + const cleanedOrigin = origin?.replace(/[\s\u3000]/g, '') || ''; + if (!cleanedOrigin || cleanedOrigin.length === 0) { + return origin || ''; + } + // 如果目标语言与当前文本语言相同,直接返回原文 if (detectlang(origin.replace(/[\s\u3000]/g, '')) === config.to) { return origin;