主要观点:
- Google Chrome 内置的 Google Translate 是一种机器翻译工具,虽方便但会干扰现代网站的运行,尤其会影响 React 等大型复杂 Web 应用。
- 探讨了 Google Translate 工作原理、对 DOM 的操作及带来的干扰问题,如翻译文本不更新、导致崩溃、
event.target
不一致等,且这些问题不只存在于 React 中,其他浏览器扩展也会有类似影响。 - 目前尚无完美解决方案,“禁止翻译”或包裹
TextNode
是暂时的解决办法,但都有各自的问题,也可考虑在应用内实现本地化,但存在诸多困难。
关键信息:
- Google Translate 通过替换
TextNode
为FontElement
来翻译网页,这会改变 DOM 结构,影响 JavaScript 应用的 DOM 操作。 - 在 React 中,翻译文本不更新会导致显示错误数据,可能误导用户甚至造成危险;崩溃问题常见,如
removeChild
和insertBefore
错误,且一些 workaround 效果不佳。 - 除 Google Translate 外,其他浏览器扩展如密码管理器、广告拦截器等也会干扰 DOM。
重要细节:
- Google Translate 工作时,会将原
TextNode
卸载并替换为新的FontElement
,这是导致问题的重要原因。 - 模拟 Google Translate 的代码示例及不同情况下的重现方式,如计数器、灯光开关等组件的测试。
- 各种 workaround 的介绍,包括猴子补丁、包裹
TextNode
、自重新渲染错误边界等,以及它们的优缺点和实际效果。 - 强调 Google Translate 团队不应被指责,问题是由于网页进化导致的,解决起来并不简单。
- 呼吁关注 Chromium 项目中的相关 bug 报告,以增加问题被解决的机会,并提供反馈渠道。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。