Browse Source

fix: clear previous requests when GetInjected is fired (#1256)

fix #1255
Gerald 4 years ago
parent
commit
456bd662f1
2 changed files with 8 additions and 8 deletions
  1. 5 2
      src/background/index.js
  2. 3 6
      src/background/utils/requests.js

+ 5 - 2
src/background/index.js

@@ -13,10 +13,10 @@ import { getOption, hookOptions } from './utils/options';
 import { getInjectedScripts } from './utils/preinject';
 import { SCRIPT_TEMPLATE, resetScriptTemplate } from './utils/template-hook';
 import { resetValueOpener, addValueOpener } from './utils/values';
+import { clearRequestsByTabId } from './utils/requests';
 import './utils/clipboard';
 import './utils/hotkeys';
 import './utils/notifications';
-import './utils/requests';
 import './utils/script';
 import './utils/tabs';
 import './utils/tester';
@@ -62,7 +62,10 @@ Object.assign(commands, {
   /** @return {Promise<Object>} */
   async GetInjected(_, src) {
     const { frameId, tab, url } = src;
-    if (!frameId) resetValueOpener(tab.id);
+    if (!frameId) {
+      resetValueOpener(tab.id);
+      clearRequestsByTabId(tab.id);
+    }
     const res = {
       expose: !frameId && url.startsWith('https://') && expose[url.split('/', 3)[2]],
     };

+ 3 - 6
src/background/utils/requests.js

@@ -475,17 +475,14 @@ async function maybeInstallUserJs(tabId, url) {
   }
 }
 
-browser.tabs.onUpdated.addListener((tabId, changes) => {
-  if (changes.status === 'loading') {
-    clearRequestsByTabId(tabId);
-  }
-});
+// In Firefox with production code of Violentmonkey, scripts can be injected before `tabs.onUpdated` is fired.
+// Ref: https://github.com/violentmonkey/violentmonkey/issues/1255
 
 browser.tabs.onRemoved.addListener((tabId) => {
   clearRequestsByTabId(tabId);
 });
 
-function clearRequestsByTabId(tabId) {
+export function clearRequestsByTabId(tabId) {
   const set = tabRequests[tabId];
   if (set) {
     delete tabRequests[tabId];