diff options
| author | siikamiika <siikamiika@users.noreply.github.com> | 2020-02-10 01:16:06 +0200 | 
|---|---|---|
| committer | siikamiika <siikamiika@users.noreply.github.com> | 2020-02-10 01:16:06 +0200 | 
| commit | 460d306f60fa745368c8249e4bc4bdb0d0448f25 (patch) | |
| tree | 18f290d7375e6d407fce662888cb03b5f7fed357 | |
| parent | 89729d8c20e8d1113e640a46f448a9734da1fe56 (diff) | |
update popup search with chrome.tabs.sendMessage
| -rw-r--r-- | ext/bg/js/backend.js | 4 | ||||
| -rw-r--r-- | ext/bg/js/search.js | 23 | 
2 files changed, 23 insertions, 4 deletions
| diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index adfb4f10..668d1fb7 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -619,7 +619,9 @@ class Backend {              if (tab !== null) {                  await Backend._focusTab(tab);                  if (queryParams.query) { -                    await new Promise((resolve) => chrome.tabs.update(tab.id, {url}, resolve)); +                    await new Promise((resolve) => chrome.tabs.sendMessage( +                        tab.id, {action: 'searchQueryUpdate', params: {query: queryParams.query}}, resolve +                    ));                  }                  return true;              } diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js index b6a1e66a..37c96934 100644 --- a/ext/bg/js/search.js +++ b/ext/bg/js/search.js @@ -109,10 +109,12 @@ class DisplaySearch extends Display {                  });              } +            chrome.runtime.onMessage.addListener(this.onRuntimeMessage.bind(this)); +              window.addEventListener('popstate', (e) => this.onPopState(e));              window.addEventListener('copy', (e) => this.onCopy(e)); -            this.clipboardMonitor.onClipboardText = (text) => this.onClipboardText(text); +            this.clipboardMonitor.onClipboardText = (text) => this.onExternalSearchUpdate(text);              this.updateSearchButton();          } catch (e) { @@ -163,6 +165,15 @@ class DisplaySearch extends Display {          this.onSearchQueryUpdated(this.query.value, false);      } +    onRuntimeMessage({action, params}, sender, callback) { +        const handler = DisplaySearch._runtimeMessageHandlers.get(action); +        if (typeof handler !== 'function') { return false; } + +        const result = handler(this, params, sender); +        callback(result); +        return false; +    } +      onKeyDown(e) {          const key = Display.getKeyFromEvent(e);          const ignoreKeys = DisplaySearch.onKeyDownIgnoreKeys; @@ -192,9 +203,11 @@ class DisplaySearch extends Display {          this.clipboardMonitor.setPreviousText(document.getSelection().toString().trim());      } -    onClipboardText(text) { +    onExternalSearchUpdate(text) {          this.setQuery(text); -        window.history.pushState(null, '', `${window.location.pathname}?query=${encodeURIComponent(text)}`); +        const url = new URL(window.location.href); +        url.searchParams.set('query', text); +        window.history.pushState(null, '', url.toString());          this.onSearchQueryUpdated(this.query.value, true);      } @@ -340,4 +353,8 @@ DisplaySearch.onKeyDownIgnoreKeys = {      'Shift': []  }; +DisplaySearch._runtimeMessageHandlers = new Map([ +    ['searchQueryUpdate', (self, {query}) => { self.onExternalSearchUpdate(query); }] +]); +  DisplaySearch.instance = DisplaySearch.create(); |