Explorar el Código

fix: handle dialog block not working

Ahmad Kholid hace 3 años
padre
commit
61d3997761

+ 36 - 37
src/background/workflowEngine/blocksHandler/handlerHandleDialog.js

@@ -17,47 +17,46 @@ const overwriteDialog = (accept, promptText) => `
   }
 `;
 
-function handleDialog({ data, id: blockId }) {
-  return new Promise((resolve) => {
-    if (!this.settings.debugMode || BROWSER_TYPE !== 'chrome') {
-      const isScriptExist = this.preloadScripts.find(
-        ({ id }) => id === blockId
-      );
-
-      if (!isScriptExist) {
-        this.preloadScripts.push({
-          id: blockId,
-          isBlock: true,
-          name: 'javascript-code',
-          data: {
-            everyNewTab: true,
-            code: overwriteDialog(data.accept, data.promptText),
-          },
-        });
-      }
-    } else {
-      this.dialogParams = {
-        accept: data.accept,
-        promptText: data.promptText,
+async function handleDialog({ data, id: blockId }) {
+  if (!this.settings.debugMode || BROWSER_TYPE !== 'chrome') {
+    const isScriptExist = this.preloadScripts.some(({ id }) => id === blockId);
+
+    if (!isScriptExist) {
+      const payload = {
+        id: blockId,
+        isBlock: true,
+        name: 'javascript-code',
+        data: {
+          everyNewTab: true,
+          code: overwriteDialog(data.accept, data.promptText),
+        },
       };
 
-      const methodName = 'Page.javascriptDialogOpening';
-      if (!this.engine.eventListeners[methodName]) {
-        this.engine.on(methodName, () => {
-          sendDebugCommand(
-            this.activeTab.id,
-            'Page.handleJavaScriptDialog',
-            this.dialogParams
-          );
-        });
-      }
+      this.preloadScripts.push(payload);
+      await this._sendMessageToTab(payload, {}, true);
     }
+  } else {
+    this.dialogParams = {
+      accept: data.accept,
+      promptText: data.promptText,
+    };
+
+    const methodName = 'Page.javascriptDialogOpening';
+    if (!this.engine.eventListeners[methodName]) {
+      this.engine.on(methodName, () => {
+        sendDebugCommand(
+          this.activeTab.id,
+          'Page.handleJavaScriptDialog',
+          this.dialogParams
+        );
+      });
+    }
+  }
 
-    resolve({
-      data: '',
-      nextBlockId: this.getBlockConnections(blockId),
-    });
-  });
+  return {
+    data: '',
+    nextBlockId: this.getBlockConnections(blockId),
+  };
 }
 
 export default handleDialog;

+ 1 - 1
src/background/workflowEngine/blocksHandler/handlerNewTab.js

@@ -84,7 +84,7 @@ async function newTab({ id, data }) {
 
   if (this.preloadScripts.length > 0) {
     const preloadScripts = this.preloadScripts.map((script) =>
-      this._sendMessageToTab(script)
+      this._sendMessageToTab(script, {}, true)
     );
     await Promise.allSettled(preloadScripts);
   }

+ 1 - 1
src/background/workflowEngine/blocksHandler/handlerSwitchTab.js

@@ -74,7 +74,7 @@ export default async function ({ data, id }) {
 
   if (this.preloadScripts.length > 0) {
     const preloadScripts = this.preloadScripts.map((script) =>
-      this._sendMessageToTab(script)
+      this._sendMessageToTab(script, {}, true)
     );
     await Promise.allSettled(preloadScripts);
   }

+ 5 - 2
src/content/blocksHandler/handlerJavascriptCode.js

@@ -27,7 +27,9 @@ function automaResetTimeout() {
 }
 
 function javascriptCode(block) {
-  const automaScript = getAutomaScript(block.refData, block.data.everyNewTab);
+  const automaScript = block.data.everyNewTab
+    ? ''
+    : getAutomaScript(block.refData, block.data.everyNewTab);
 
   return new Promise((resolve, reject) => {
     let documentCtx = document;
@@ -143,7 +145,8 @@ function javascriptCode(block) {
       } else {
         resolve();
       }
-      documentCtx.body.appendChild(script);
+
+      documentCtx.documentElement.appendChild(script);
     });
   });
 }