]> git.r.bdr.sh - rbdr/junction/commitdiff
Inject script only once
authorRuben Beltran del Rio <redacted>
Wed, 13 Sep 2023 21:33:22 +0000 (23:33 +0200)
committerRuben Beltran del Rio <redacted>
Wed, 13 Sep 2023 21:33:22 +0000 (23:33 +0200)
extension/content_script.js
extension/junction.js

index c344bd945ca94e23ef5f954460f201cc98b6a61f..9d4666931b9fae6702c31a0dedda56e55d51ecff 100644 (file)
@@ -26,6 +26,11 @@ const internals = {
     console.error(error.stack || error);
   },
 
+  connect() {
+    internals.port = chrome.runtime.connect({ name: "content" });
+    internals.port.onMessage.addListener(internals.onMessage);
+  },
+
   async joinAudioCall({ currentUrl, tada }) {
     try {
       const mediaStream = await startMedia();
@@ -84,8 +89,10 @@ const internals = {
   },
 };
 
-internals.port = chrome.runtime.connect({ name: "content" });
-internals.port.onMessage.addListener(internals.onMessage);
+internals.connect();
+chrome.runtime.onConnect.addListener(() => {
+  internals.connect();
+});
 
 console.debug("Content Script Loaded");
 
index 3e8b4d9e4996b50c738d476df389573ad0e4d09d..776096927473e635738e8577f8988675b7e9645e 100644 (file)
@@ -1,5 +1,6 @@
 const internals = {
   promisesSupported: !!window.browser,
+  injectedScript: false,
   port: null,
   currentUrl: null,
 
@@ -20,14 +21,11 @@ const internals = {
       return internals.hangUp();
     }
 
-    return internals.joinAudioCall();
+    return internals.initializeContentScript();
   },
 
-  onConnect(port) {
-    internals.port = port;
-    port.onDisconnect.addListener(internals.onDisconnect);
-    port.onMessage.addListener(internals.onMessage);
-    port.postMessage({
+  joinAudioCall() {
+    internals.port.postMessage({
       action: "joinAudioCall",
       data: {
         currentUrl: internals.currentUrl,
@@ -38,6 +36,13 @@ const internals = {
     internals.setIcon("hangUp");
   },
 
+  onConnect(port) {
+    internals.port = port;
+    port.onDisconnect.addListener(internals.onDisconnect);
+    port.onMessage.addListener(internals.onMessage);
+    internals.joinAudioCall();
+  },
+
   onMessage(message) {
     if (message.action === "error") {
       internals.getRoot().browserAction.setBadgeText({ text: "x" }, () => {});
@@ -52,22 +57,24 @@ const internals = {
     internals.getRoot().browserAction.enable();
   },
 
-  async joinAudioCall() {
+  async initializeContentScript() {
     internals.getRoot().browserAction.disable();
     const activeTabs = await internals.getActiveTabs();
 
     internals.currentUrl = activeTabs[0].url;
-    const execution = await internals.getRoot().tabs.executeScript(
-      activeTabs[0].id,
-      {
-        file: "/build/content_script.js",
-      },
-      () => {
-        if (internals.getRoot().runtime.lastError) {
-          internals.onDisconnect();
-        }
-      },
-    );
+    if (!internals.injectedScript) {
+      const execution = await internals.getRoot().tabs.executeScript(
+        activeTabs[0].id,
+        {
+          file: "/build/content_script.js",
+        },
+        () => {
+          internals.injectedScript = true;
+        },
+      );
+    } else {
+      internals.getRoot().tabs.connect(activeTabs[0].id)
+    }
 
     if (execution && !execution[0]) {
       internals.onDisconnect();