diff options
Diffstat (limited to 'ext/js/accessibility')
-rw-r--r-- | ext/js/accessibility/google-docs.js | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/ext/js/accessibility/google-docs.js b/ext/js/accessibility/google-docs.js index f9ba0f7f..e45743ab 100644 --- a/ext/js/accessibility/google-docs.js +++ b/ext/js/accessibility/google-docs.js @@ -15,7 +15,36 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -(() => { +(async () => { + // Reentrant check + if (self.googleDocsAccessibilitySetup) { return; } + self.googleDocsAccessibilitySetup = true; + + const invokeApi = (action, params) => { + return new Promise((resolve, reject) => { + chrome.runtime.sendMessage({action, params}, (response) => { + void chrome.runtime.lastError; + if (typeof response !== 'object' || response === null) { + reject(new Error('Unexpected response')); + } else if (typeof response.error !== 'undefined') { + reject(new Error('Invalid response')); + } else { + resolve(response.result); + } + }); + }); + }; + + const optionsContext = {depth: 0, url: location.href}; + let options; + try { + options = await invokeApi('optionsGet', {optionsContext}); + } catch (e) { + return; + } + + if (!options.accessibility.forceGoogleDocsHtmlRendering) { return; } + let parent = document.head; if (parent === null) { parent = document.documentElement; @@ -24,4 +53,5 @@ const script = document.createElement('script'); script.textContent = 'window._docs_force_html_by_ext = true;'; parent.appendChild(script); + parent.removeChild(script); })(); |