Google翻译小部件2023年变更后异常,求可行修复方案
Google翻译小部件2023年跨非源语言切换Bug修复方案
问题回顾
截至2023年,Google翻译小部件出现两处问题:
- 部分iframe及界面元素类名被移除,原有样式和交互JS失效(可通过其他元素定位方式修复)
- 核心Bug:从非源语言切换至另一非源语言时,触发错误:
TypeError: a is not an Object. (evaluating 'textContent"in a')
已验证的修复方法
1. 强制中转源语言(规避性修复)
在自定义语言切换逻辑中,先切回源语言,再切换到目标非源语言,绕开触发Bug的路径:
// 示例:sourceLang为预设的源语言,getCurrentLang为自定义获取当前语言的方法 function safeSwitchLanguage(targetLang) { const sourceLang = 'en'; const currentLang = getCurrentLang(); if (currentLang !== sourceLang && targetLang !== sourceLang) { // 先切换回源语言 window.google.translate.TranslateElement.getInstance().changeLanguage(sourceLang); // 延迟执行目标语言切换,确保小部件状态更新 setTimeout(() => { window.google.translate.TranslateElement.getInstance().changeLanguage(targetLang); }, 250); } else { window.google.translate.TranslateElement.getInstance().changeLanguage(targetLang); } }
2. 错误捕获后重置小部件(容错性修复)
全局监听该特定错误,触发小部件重新初始化:
window.addEventListener('error', (event) => { if (event.message.includes('a is not an Object. (evaluating \'textContent"in a\')')) { const translateEl = document.getElementById('google_translate_element'); if (translateEl) { // 清空容器并重新初始化 translateEl.innerHTML = ''; googleTranslateElementInit(); } } });
说明
以上方案均为社区开发者总结的临时解决办法,目前Google官方尚未针对该Bug发布正式修复补丁。第一种方案体验更流畅,第二种方案适合无法修改切换逻辑的场景。
内容的提问来源于stack exchange,提问作者Brendon Muir
相关产品推荐
相关产品推荐

