Browse Source

fix: context menu trigger

Ahmad Kholid 2 years ago
parent
commit
7d2be6d6de
1 changed files with 32 additions and 30 deletions
  1. 32 30
      src/content/index.js

+ 32 - 30
src/content/index.js

@@ -42,8 +42,7 @@ function messageToFrame(frameElement, blockData) {
 }
 async function executeBlock(data) {
   const removeExecutedBlock = showExecutedBlock(data, data.executedBlockOnWeb);
-
-  if (data.data?.selector?.includes('|>') && isMainFrame) {
+  if (data.data?.selector?.includes('|>')) {
     const [frameSelector, selector] = data.data.selector.split(/\|>(.+)/);
     const frameElement = document.querySelector(frameSelector);
     const frameError = (message) => {
@@ -136,18 +135,41 @@ function messageListener({ data, source }) {
 
   initCommandPalette();
 
+  let contextElement = null;
+  let $ctxLink = '';
+  let $ctxMediaUrl = '';
+  let $ctxTextSelection = '';
+
   window.isAutomaInjected = true;
   window.addEventListener('message', messageListener);
+  window.addEventListener(
+    'contextmenu',
+    ({ target }) => {
+      contextElement = target;
+      $ctxTextSelection = window.getSelection().toString();
 
-  let contextElement = null;
-  let $ctxTextSelection = '';
+      const tag = target.tagName;
+      if (tag === 'A') {
+        $ctxLink = target.href;
+      }
+
+      const mediaTags = ['AUDIO', 'VIDEO', 'IMG'];
+      if (mediaTags.includes(tag)) {
+        let mediaSrc = target.src || '';
+
+        if (!mediaSrc.src) {
+          const sourceEl = target.querySelector('source');
+          if (sourceEl) mediaSrc = sourceEl.src;
+        }
+
+        $ctxMediaUrl = mediaSrc;
+      }
+    },
+    true
+  );
 
   if (isMainFrame) {
     shortcutListener();
-    window.addEventListener('contextmenu', ({ target }) => {
-      contextElement = target;
-      $ctxTextSelection = window.getSelection().toString();
-    });
     // window.addEventListener('load', elementObserver);
   }
 
@@ -198,30 +220,10 @@ function messageListener({ data, source }) {
             break;
           }
           case 'context-element': {
-            let $ctxLink = '';
-            let $ctxMediaUrl = '';
             let $ctxElSelector = '';
 
             if (contextElement) {
               $ctxElSelector = findSelector(contextElement);
-
-              const tag = contextElement.tagName;
-              if (tag === 'A') {
-                $ctxLink = contextElement.href;
-              }
-
-              const mediaTags = ['AUDIO', 'VIDEO', 'IMG'];
-              if (mediaTags.includes(tag)) {
-                let mediaSrc = contextElement.src || '';
-
-                if (!mediaSrc.src) {
-                  const sourceEl = contextElement.querySelector('source');
-                  if (sourceEl) mediaSrc = sourceEl.src;
-                }
-
-                $ctxMediaUrl = mediaSrc;
-              }
-
               contextElement = null;
             }
             if (!$ctxTextSelection) {
@@ -229,10 +231,10 @@ function messageListener({ data, source }) {
             }
 
             resolve({
-              $ctxElSelector,
-              $ctxTextSelection,
               $ctxLink,
               $ctxMediaUrl,
+              $ctxElSelector,
+              $ctxTextSelection,
             });
             break;
           }