Browse Source

fix: variables are not registered when using JS block inside an iframe

Ahmad Kholid 3 years ago
parent
commit
2986b3026b

+ 0 - 1
src/background/workflowEngine/blocksHandler/handlerJavascriptCode.js

@@ -28,7 +28,6 @@ export async function javascriptCode({ outputs, data, ...block }, { refData }) {
       payload.data.code += `\nautomaNextBlock()`;
 
     const result = await this._sendMessageToTab(payload);
-
     if (result) {
       if (result.columns.data?.$error) {
         throw new Error(result.columns.data.message);

+ 0 - 1
src/components/newtab/workflow/edit/EditSwitchTo.vue

@@ -21,7 +21,6 @@
     </ui-select>
     <edit-autocomplete
       v-if="data.windowType === 'iframe'"
-      :items="autocomplete"
       :trigger-char="['{{', '}}']"
       block
       hide-empty

+ 9 - 6
src/content/blocksHandler/handlerJavascriptCode.js

@@ -14,10 +14,10 @@ function automaSetVariable(name, value) {
   ${varName}.variables[name] = value;
 }
 function automaNextBlock(data, insert = true) {
-  window.dispatchEvent(new CustomEvent('__automa-next-block__', { detail: { data, insert, refData: ${varName} } }));
+  document.body.dispatchEvent(new CustomEvent('__automa-next-block__', { detail: { data, insert, refData: ${varName} } }));
 }
 function automaResetTimeout() {
- window.dispatchEvent(new CustomEvent('__automa-reset-timeout__'));
+ document.body.dispatchEvent(new CustomEvent('__automa-reset-timeout__'));
 }
   `;
 
@@ -127,10 +127,13 @@ function javascriptCode(block) {
           });
         };
 
-        window.addEventListener('__automa-next-block__', ({ detail }) => {
-          cleanUp(detail || {});
-        });
-        window.addEventListener('__automa-reset-timeout__', () => {
+        documentCtx.body.addEventListener(
+          '__automa-next-block__',
+          ({ detail }) => {
+            cleanUp(detail || {});
+          }
+        );
+        documentCtx.body.addEventListener('__automa-reset-timeout__', () => {
           clearTimeout(timeout);
 
           timeout = setTimeout(cleanUp, block.data.timeout);