From 8a1dcbc9f584136f31e8f71e13590979ce9f1153 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sat, 2 Apr 2022 09:38:40 -0400 Subject: [PATCH] Workaround for Google Docs canvas rendering updates (#2096) --- ext/js/accessibility/google-docs.js | 34 ++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/ext/js/accessibility/google-docs.js b/ext/js/accessibility/google-docs.js index cdd49237..412ccf60 100644 --- a/ext/js/accessibility/google-docs.js +++ b/ext/js/accessibility/google-docs.js @@ -45,13 +45,45 @@ if (!options.accessibility.forceGoogleDocsHtmlRendering) { return; } + /* eslint-disable */ + const inject = () => { + const start = Date.now(); + const maxDuration = 10000; + const updateDocData = () => { + const target = window._docs_flag_initialData; + if (typeof target === 'object' && target !== null) { + try { + target['kix-awcp'] = true; + } catch (e) { + // NOP + } + } else if (Date.now() - start < maxDuration) { + setTimeout(updateDocData, 0); + } + }; + const params = new URLSearchParams(location.search); + if (params.get('mode') !== 'html') { + const url = new URL(location.href); + params.set('mode', 'html'); + url.search = params.toString(); + try { + history.replaceState(history.state, '', url.toString()); + } catch (e) { + // Ignore + } + } + window._docs_force_html_by_ext = true; + updateDocData(); + }; + /* eslint-enable */ + let parent = document.head; if (parent === null) { parent = document.documentElement; if (parent === null) { return; } } const script = document.createElement('script'); - script.textContent = 'window._docs_force_html_by_ext = true;'; + script.textContent = `(${inject.toString()})();`; parent.appendChild(script); parent.removeChild(script); })();