ソースを参照

refactor: deobfuscate makeGmApiWrapper grant loop

tophf 2 週間 前
コミット
4af2016c78
1 ファイル変更9 行追加7 行削除
  1. 9 7
      src/injected/web/gm-api-wrapper.js

+ 9 - 7
src/injected/web/gm-api-wrapper.js

@@ -48,15 +48,17 @@ export function makeGmApiWrapper(script) {
     assign(gm, componentUtils);
     gm.unsafeWindow = global;
     for (let name of grant) {
-      let fn, fnGm4, gmName, gm4name;
-      if (name::slice(0, 3) === 'GM.' && (gm4name = name::slice(3)) && (fnGm4 = GM4_ALIAS[gm4name])
-      || (fn = GM_API_CTX[gmName = gm4name ? `GM_${gm4name}` : name])
-      || (fn = GM_API_CTX_GM4ASYNC[gmName]) && (!gm4name || (fnGm4 = fn))) {
-        fn = safeBind(fnGm4 || fn,
-          fnGm4
+      let fn, fnAsync, gm4name;
+      if (name::slice(0, 3) === 'GM.' && (gm4name = name::slice(3))) {
+        name = 'GM_' + gm4name;
+        fn = fnAsync = GM4_ALIAS[gm4name];
+      }
+      if (fn || (fn = GM_API_CTX[name]) || (fn = fnAsync = GM_API_CTX_GM4ASYNC[name])) {
+        fn = safeBind(fn,
+          fnAsync && gm4name
             ? contextAsync || (contextAsync = assign(createNullObj(), context, { async: true }))
             : context);
-      } else if (!(fn = GM_API[gmName]) && (
+      } else if (!(fn = GM_API[name]) && (
         fn = name === 'window.close' && sendTabClose
           || name === 'window.focus' && sendTabFocus
       )) {