diff --git a/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java b/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java index cf70a1ccb..94c7b415a 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java @@ -26,7 +26,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.UUID; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -40,13 +39,11 @@ public class Spider extends com.github.catvod.crawler.Spider { private final DexClassLoader dex; private QuickJSContext ctx; private JSObject jsObject; - private final String name; private final String key; private final String api; private boolean cat; public Spider(String key, String api, DexClassLoader dex) throws Exception { - this.name = "__" + UUID.randomUUID().toString().replace("-", "") + "__"; this.executor = Executors.newSingleThreadExecutor(); this.key = key; this.api = api; @@ -136,28 +133,27 @@ public class Spider extends com.github.catvod.crawler.Spider { submit(() -> { if (ctx == null) createCtx(); if (dex != null) createDex(); - String content = getContent(); - ctx.evaluateModule(content, api); - jsObject = (JSObject) ctx.getProperty(ctx.getGlobalObject(), name); + createObj(); return null; }).get(); } private void createCtx() { ctx = QuickJSContext.create(); - ctx.setConsole(new Console()); + ctx.evaluate(Path.asset("js/lib/http.js")); Global.create(ctx, executor).setProperty(); ctx.getGlobalObject().setProperty("local", Local.class); - ctx.getGlobalObject().getContext().evaluate(Path.asset("js/lib/http.js")); - ctx.setModuleLoader(new QuickJSContext.DefaultModuleLoader() { + ctx.getGlobalObject().setProperty("console", Console.class); + ctx.setModuleLoader(new QuickJSContext.BytecodeModuleLoader() { @Override public String moduleNormalizeName(String baseModuleName, String moduleName) { return UriUtil.resolve(baseModuleName, moduleName); } @Override - public String getModuleStringCode(String moduleName) { - return Module.get().fetch(moduleName); + public byte[] getModuleBytecode(String moduleName) { + String code = Module.get().fetch(moduleName); + return code.startsWith("//bb") ? Module.get().bb(code) : ctx.compileModule(code, moduleName); } }); } @@ -205,17 +201,20 @@ public class Spider extends com.github.catvod.crawler.Spider { }); } - private String getContent() { - String global = "globalThis." + name; + private void createObj() { + String spider = "__JS_SPIDER__"; + String global = "globalThis." + spider; String content = Module.get().fetch(api); + String catOnly = "\n" + global + " = __jsEvalReturn();"; if (content.contains("__jsEvalReturn")) { cat = true; - return content.concat(global + " = __jsEvalReturn()"); - } else if (content.contains("__JS_SPIDER__")) { - return content.replace("__JS_SPIDER__", global); + ctx.evaluateModule(content.concat(catOnly), api); + } else if (content.contains(spider)) { + ctx.evaluateModule(content.replace(spider, global), api); } else { - return content.replaceAll("export default.*?[{]", global + " = {"); + ctx.evaluateModule(content.replaceAll("export default.*?[{]", global + " = {"), api); } + jsObject = (JSObject) ctx.getProperty(ctx.getGlobalObject(), spider); } private Object[] proxy1(Map params) throws Exception { diff --git a/quickjs/src/main/java/com/fongmi/quickjs/method/Console.java b/quickjs/src/main/java/com/fongmi/quickjs/method/Console.java index feb47a62b..587cd84ba 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/method/Console.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/method/Console.java @@ -1,29 +1,41 @@ package com.fongmi.quickjs.method; +import androidx.annotation.Keep; + import com.orhanobut.logger.Logger; -import com.whl.quickjs.wrapper.QuickJSContext; +import com.whl.quickjs.wrapper.JSMethod; + +public class Console { -public class Console implements QuickJSContext.Console { + private final String TAG = "quickjs"; - private static final String TAG = "quickjs"; + @Keep + @JSMethod + public void debug(Object array) { + Logger.t(TAG).d(String.valueOf(array)); + } - @Override - public void log(String info) { - Logger.t(TAG).d(info); + @Keep + @JSMethod + public void error(Object array) { + Logger.t(TAG).e(String.valueOf(array)); } - @Override - public void info(String info) { - Logger.t(TAG).i(info); + @Keep + @JSMethod + public void warn(Object array) { + Logger.t(TAG).w(String.valueOf(array)); } - @Override - public void warn(String info) { - Logger.t(TAG).w(info); + @Keep + @JSMethod + public void info(Object array) { + Logger.t(TAG).i(String.valueOf(array)); } - @Override - public void error(String info) { - Logger.t(TAG).e(info); + @Keep + @JSMethod + public void log(Object array) { + Logger.t(TAG).v(String.valueOf(array)); } } diff --git a/quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java b/quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java index 84ad73be8..12effbe0a 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java @@ -33,6 +33,7 @@ public class Module { public String fetch(String name) { if (cache.contains(name)) return cache.get(name); if (name.startsWith("http")) cache.put(name, request(name)); + if (name.startsWith("lib/")) cache.put(name, Path.asset("js/" + name)); if (name.startsWith("assets")) cache.put(name, Path.asset(name.substring(9))); return cache.get(name); }