diff options
Diffstat (limited to 'ext/js/background')
| -rw-r--r-- | ext/js/background/backend.js | 36 | 
1 files changed, 35 insertions, 1 deletions
| diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js index 623f3612..b4b9bc27 100644 --- a/ext/js/background/backend.js +++ b/ext/js/background/backend.js @@ -124,7 +124,8 @@ class Backend {              ['isTabSearchPopup',             {async: true,  contentScript: true,  handler: this._onApiIsTabSearchPopup.bind(this)}],              ['triggerDatabaseUpdated',       {async: false, contentScript: true,  handler: this._onApiTriggerDatabaseUpdated.bind(this)}],              ['testMecab',                    {async: true,  contentScript: true,  handler: this._onApiTestMecab.bind(this)}], -            ['textHasJapaneseCharacters',    {async: false, contentScript: true,  handler: this._onApiTextHasJapaneseCharacters.bind(this)}] +            ['textHasJapaneseCharacters',    {async: false, contentScript: true,  handler: this._onApiTextHasJapaneseCharacters.bind(this)}], +            ['documentStart',                {async: false, contentScript: true,  handler: this._onDocumentStart.bind(this)}]          ]);          this._messageHandlersWithProgress = new Map([          ]); @@ -745,6 +746,12 @@ class Backend {          return this._japaneseUtil.isStringPartiallyJapanese(text);      } +    _onDocumentStart(params, sender) { +        const {tab, frameId, url} = sender; +        if (typeof url !== 'string' || typeof tab !== 'object' || tab === null) { return; } +        this._updateTabAccessibility(url, tab, frameId); +    } +      // Command handlers      async _onCommandOpenSearchPage(params) { @@ -2207,4 +2214,31 @@ class Backend {              // NOP          }      } + +    _updateTabAccessibility(url, tab, frameId) { +        let file = null; + +        switch (new URL(url).hostname) { +            case 'docs.google.com': +                { +                    const optionsContext = {depth: 0, url}; +                    const options = this._getProfileOptions(optionsContext); +                    if (!options.accessibility.forceGoogleDocsHtmlRendering) { return; } +                    file = 'js/accessibility/google-docs.js'; +                } +                break; +        } + +        if (file === null) { return; } + +        const details = { +            allFrames: false, +            frameId, +            file, +            matchAboutBlank: true, +            runAt: 'document_start' +        }; +        const callback = () => this._checkLastError(chrome.runtime.lastError); +        chrome.tabs.executeScript(tab.id, details, callback); +    }  } |