Ver código fonte

fix: create element block not working in firefox

Ahmad Kholid 2 anos atrás
pai
commit
4edffea3e3

+ 16 - 0
src/content/blocksHandler/handlerCreateElement.js

@@ -37,6 +37,22 @@ async function createElement(block) {
     document.body.appendChild(style);
   }
 
+  if (data.injectJS) {
+    data.preloadScripts.forEach((item) => {
+      const script = document.createElement(item.type);
+      script.id = `${baseId}-script`;
+      script.textContent = item.script;
+
+      document.body.appendChild(script);
+    });
+
+    const script = document.createElement('script');
+    script.id = `${baseId}-javascript`;
+    script.textContent = `(() => { ${data.automaScript}\n${data.javascript} })()`;
+
+    document.body.appendChild(script);
+  }
+
   return true;
 }
 

+ 13 - 4
src/newtab/workflowEngine/blocksHandler/handlerCreateElement.js

@@ -46,14 +46,23 @@ async function handleCreateElement(block, { refData }) {
   data.preloadScripts = preloadScripts;
 
   const payload = { ...block, data };
-  await this._sendMessageToTab(payload, {}, data.runBeforeLoad ?? false);
 
-  if (data.javascript) {
-    const automaScript = getAutomaScript({ ...refData, secrets: {} });
+  if (data.javascript && this.engine.isMV2) {
+    payload.data.injectJS = true;
+    payload.data.automaScript = getAutomaScript({ ...refData, secrets: {} });
+  }
+
+  await this._sendMessageToTab(payload, {}, data.runBeforeLoad ?? false);
 
+  if (data.javascript && !this.engine.isMV2) {
     await browser.scripting.executeScript({
       world: 'MAIN',
-      args: [data.javascript, block.id, automaScript, preloadScripts],
+      args: [
+        data.javascript,
+        block.id,
+        payload.script.automaScript,
+        preloadScripts,
+      ],
       target: {
         tabId: this.activeTab.id,
         frameIds: [this.activeTab.frameId || 0],