我使用Kotlin在Android应用程序中使用Duktape成功解析和评估了javascript文件。
val file_name = "lib.js"
val js_string = application.assets.open(file_name).bufferedReader().use {
it.readText()
}
val duktape = Duktape.create()
try {
Log.d("Greeting", duktape.evaluate("'hello world'.toUpperCase();").toString())
duktape.evaluate(js_string)
} finally {
duktape.close()
}
javascript文件是使用Browserify创建的,因此它是一个包含所有内容的单个文件,并且工作正常。但是我需要从该模块请求一个模块和一个方法,例如:
var test = require('testjs-lib');
test.EVPair.makeRandom().toWTF();
除了此链接,我不知道该怎么做,也没有找到任何示例:http://wiki.duktape.org/HowtoModules.html
它告诉我要使用modsearch,但是我不知道如何进行操作或应将其放置在哪里,即使它适用于Duktape Android(https://github.com/square/duktape-android)也不清楚。
是否有人成功完成了这项工作?
最佳答案
假设您要在duktape中包含Underscore。
Assets
文件夹中。在我们的示例中,它像是:underscore.js
像:
```
public interface DuktapeHelper {
@JavascriptInterface
String getUnderScore();
}
``
```
duktape.bind("helper", DuktapeHelper.class, <instance of your DuktapeHelperImplementation>);
```
modSearch
接口(interface)在duktape中实现helper
函数。 ```
duktape.evaluate("Duktape.modSearch = function (id) {\n" +
" if (id == \"underscore\") {" +
" return helper.getUnderScore();" +
" } " +
" throw new Error('cannot find module: ' + id);" +
" };" +
"var _ = require('underscore')._; ");
```