aboutsummaryrefslogtreecommitdiff
path: root/ext/js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2022-09-24 16:41:21 -0400
committerGitHub <noreply@github.com>2022-09-24 16:41:21 -0400
commit115c3ce3d74188bb33d73f33f7546d05d6acbee8 (patch)
tree9cadc8d975b04d62d5909524655fa63beaa964ef /ext/js
parent1e91bf151f43ad05138e862ba4a03abad6929e5f (diff)
API loadExtensionScripts (#2233)
* Inject MV3 scripts immediately * Add api.loadExtensionScripts
Diffstat (limited to 'ext/js')
-rw-r--r--ext/js/background/backend.js13
-rw-r--r--ext/js/background/script-manager.js1
-rw-r--r--ext/js/comm/api.js4
3 files changed, 17 insertions, 1 deletions
diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js
index a3694dd3..20402539 100644
--- a/ext/js/background/backend.js
+++ b/ext/js/background/backend.js
@@ -130,7 +130,8 @@ class Backend {
['testMecab', {async: true, contentScript: true, handler: this._onApiTestMecab.bind(this)}],
['textHasJapaneseCharacters', {async: false, contentScript: true, handler: this._onApiTextHasJapaneseCharacters.bind(this)}],
['getTermFrequencies', {async: true, contentScript: true, handler: this._onApiGetTermFrequencies.bind(this)}],
- ['findAnkiNotes', {async: true, contentScript: true, handler: this._onApiFindAnkiNotes.bind(this)}]
+ ['findAnkiNotes', {async: true, contentScript: true, handler: this._onApiFindAnkiNotes.bind(this)}],
+ ['loadExtensionScripts', {async: true, contentScript: true, handler: this._onApiLoadExtensionScripts.bind(this)}]
]);
this._messageHandlersWithProgress = new Map([
]);
@@ -771,6 +772,16 @@ class Backend {
return await this._anki.findNotes(query);
}
+ async _onApiLoadExtensionScripts({files}, sender) {
+ if (!sender || !sender.tab) { throw new Error('Invalid sender'); }
+ const tabId = sender.tab.id;
+ if (typeof tabId !== 'number') { throw new Error('Sender has invalid tab ID'); }
+ const {frameId} = sender;
+ for (const file of files) {
+ await this._scriptManager.injectScript(file, tabId, frameId, false, true, 'document_start');
+ }
+ }
+
// Command handlers
async _onCommandOpenSearchPage(params) {
diff --git a/ext/js/background/script-manager.js b/ext/js/background/script-manager.js
index 17b95242..3deb74fe 100644
--- a/ext/js/background/script-manager.js
+++ b/ext/js/background/script-manager.js
@@ -290,6 +290,7 @@ class ScriptManager {
_injectScriptMV3(file, tabId, frameId, allFrames) {
return new Promise((resolve, reject) => {
const details = {
+ injectImmediately: true,
files: [file],
target: {tabId, allFrames}
};
diff --git a/ext/js/comm/api.js b/ext/js/comm/api.js
index 2ffe2d8c..2adc9a99 100644
--- a/ext/js/comm/api.js
+++ b/ext/js/comm/api.js
@@ -176,6 +176,10 @@ class API {
return this._invoke('findAnkiNotes', {query});
}
+ loadExtensionScripts(files) {
+ return this._invoke('loadExtensionScripts', {files});
+ }
+
// Utilities
_createActionPort(timeout=5000) {