【问题标题】:How to force Google Docs to render HTML instead of Canvas from Chrome Extension?如何强制 Google Docs 从 Chrome 扩展中呈现 HTML 而不是 Canvas?
【发布时间】:2021-11-01 22:28:15
【问题描述】:

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

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

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

_docs_force_html_by_ext 未定义:

_docs_force_html_by_ext 是通过 Grammarly 设置的:

【问题讨论】:

  • 这个变量应该在page context里面设置为window._docs_force_html_by_ext =true并且你的内容脚本应该在document_start运行。
  • @wOxxOm - 你知道设置这个变量(强制 HTML 模式)是否也适用于 Firefox 扩展?

标签: javascript google-chrome-extension


【解决方案1】:

该问题有两种解决方案:适用于旧版本的 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 Doc 代码的正确位置手动设置所需参数。

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

HTML:
<span id="spanId"></id>
JS:
window['spanId'] == true;

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

<body id="_docs_force_html_by_ext ">

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

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

【讨论】:

  • 黛米,你是怎么找到的?您的回复是我看到的唯一提到的地方(我很高兴看到它,因为它非常有用。)您是否知道有任何方法可以永久强制文档呈现为 HTML?自从切换到使用 Canvas 后,IMO Docs 现在在 Firefox 中几乎无法使用......文本模糊。
  • 我对所有 Google 文档进行了逆向工程。
  • 谢谢你,@Demi Murych。我很高兴使用您的 ?mode=html 代码,最近注意到即使添加了该代码,文本似乎又变得模糊了。我以为只是我的眼睛!但现在我从你的评论中看到幕后发生了一些变化。如果您发现如何再次解决此问题,请告诉我们?。谷歌一直在搞砸这个很烦人。
  • Demi,您的第 1 点和第 2 点...它们似乎使用三元运算符并返回一些文本(如果为真,则返回'html render'/'html' 或如果为'canvas render'/'canvas' false),但这段文字是干什么用的?它去哪儿了?您的代码似乎没有使用返回的文本设置任何变量,是吗?
  • 我的代码解释了如果满足某些条件会发生什么。例如我写: window._docs_force_html_by_ext == true ? 'html render' : 'canvas render' 这段代码应该被理解为 - 如果在运行 Google Docs 脚本之前,window._docs_force_html_by_ext 标识符被设置为使表达式 window._docs_force_html_by_ext == true 的值,那么 html 渲染将被启用。也就是说,您需要在运行 Google Docs 代码之前将 window._docs_force_html_by_ext 标识符的值设置为任意值。我以同样的方式描述了其他条件。
【解决方案2】:

Google 正在将一些应用程序列入白名单,这些应用程序可以使用脚本将文档强制为 HTML 回退版本,以提醒画布之前的时间或作为注释画布,从而可以与 SVG 画布进行扩展集成。

您需要申请白名单才能使用这些功能:https://docs.google.com/forms/d/e/1FAIpQLScFxMgvXlq2KMsp0UIM66pvThTF1hpojiXQTqyq9txW79OWag/viewform

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 消息很小,所以把它全部粘贴过来,并保留一个原始链接。
  • 如果您认为另一个问题有此问题的答案,正确的做法是将问题标记为重复,而不是发布相同的答案。
  • 最新的问题是应该被标记的问题,还是无关紧要?
  • 不太受欢迎的应该指向更受欢迎的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 2011-05-14
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多