如何强制 Google Docs 从 Chrome 扩展中渲染 HTML 而不是 Canvas?

Hud*_*Kim 2 javascript google-chrome-extension

Google 文档更新为基于画布的渲染而不是 HTML 渲染后,是否可以强制 Google 文档从 chrome 扩展而不是画布渲染 HTML?不知何故,像 Grammarly 这样的 chrome 扩展能够做到这一点,但我不完全确定如何做到。

根据我的研究,虽然我认为是什么允许他们通过 _docs_force_html_by_ext 变量来做到这一点,但我相信这仅适用于白名单扩展。

我可以填写某种替代方案或表格来将我的扩展程序列入白名单吗?

在此输入图像描述

_docs_force_html_by_ext 未定义:在此输入图像描述

_docs_force_html_by_ext 通过 Grammarly 设置:在此输入图像描述

Dem*_*ych 7

该问题有两种解决方案:对于旧版本的 Google Docs 和对于新版本。

解决方案适用于旧版本的 Google 文档

您需要将 GET 参数?mode=html添加 到 URL。

例如,如果文档 URL 为:
docs.google.com/document/exampleId/edit

将网址更改为:
docs.google.com/document/d/exampleId/edit ?mode=html

这将强制 Google 文档使用 HTML 渲染器。


2022 年 3 月 4 日更新

Google 更改了 html 渲染激活代码。html 渲染器位于当前代码中,如果您手动打开它,它就可以工作。我现在正在研究需要满足哪些新条件才能自动启用它。我稍后会报告结果。


2022 年 3 月 9 日更新

新的解决方案

再次证明,Google 程序员并不像人们想象的那么优秀。所以...

现在有三种方法可以启用 html 渲染。至少我找到了三个:

  1. 在Google Docs代码开始之前:
    window._docs_force_html_by_ext == true ? 'html render' : 'canvas render'
  2. 在Google Docs代码开始之前:
    (GET['mode']=='html' && window._docs_flag_initialData['kix-awcp'] == true) ? 'html' : 'canvas'
  3. 在 Google 文档代码中的正确位置手动设置所需的参数。

但是,Google 的程序员忘记了 window 对象还包含对设置了 id 属性的元素的引用。例如:

HTML:
<span id="spanId"></id>
JS:
window['spanId'] == true;
Run Code Online (Sandbox Code Playgroud)

也就是说,如果我们可以向页面上的任何元素添加一个 id 属性,其值将等于 _docs_force_html_by_ext,那么我们将自动在 window 对象中收到一个值为 !=false 的标识符。由此可见,由于满足方法 1 的条件,因此 html 渲染将打开。例如

<body id="_docs_force_html_by_ext ">
Run Code Online (Sandbox Code Playgroud)

提示1:据我所知,任何浏览器插件都可以在主代码之前运行,并向任何元素添加id属性。

提示2: link元素可以有一个id属性。我想你明白了。

  • 我对所有 Google 文档进行了逆向工程。 (3认同)