首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Android中使用Duktape访问Javascript模块

如何在Android中使用Duktape访问Javascript模块
EN

Stack Overflow用户
提问于 2018-04-16 15:05:18
回答 2查看 1.1K关注 0票数 12

在我的Android应用程序中,我使用Kotlin成功地解析和评估了一个javascript文件。

代码语言: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创建的,因此它是一个包含所有内容的单一文件,并且工作正常。但是我需要从模块中请求一个模块和一个方法,例如:

代码语言:javascript
复制
var test = require('testjs-lib');
test.EVPair.makeRandom().toWTF();

我不知道怎么做,也没有找到任何例子,除了这个链接:http://wiki.duktape.org/HowtoModules.html

它告诉我使用modsearch,但我不知道该怎么做,也不知道应该把它放在哪里,即使它适用于Duktape Android (https://github.com/square/duktape-android)。

有没有人成功地做了这件事,可以为这件事提供一些线索?

EN

回答 2

Stack Overflow用户

发布于 2018-04-23 23:08:01

在testjs-lib.js中,添加使用模块testjs-lib.js本身导出的JS代码。例如:

代码语言:javascript
复制
function myModule() {
  this.hello = function() {
    return 'hello!';
  }

  this.goodbye = function() {
    return 'goodbye!';
  }
}

module.exports = myModule;

//You code goes here
console.log(myModule.hello());
console.log(myModule.goodbye());

然后让Duktape评估整个文件。

票数 2
EN

Stack Overflow用户

发布于 2018-06-19 22:39:14

假设您想要在duktape中包含Underscore

  1. 将您的模块/库代码放在一个单独的js文件中。在android项目中,您可以将此js文件放在Assets文件夹中。在我们的示例中,应该是这样的:underscore.js
  2. Create是一个java接口,duktape使用该接口将输入流输入到这个js文件中。喜欢的东西:

代码语言:javascript
复制
```javascript

公共接口DuktapeHelper {

代码语言:javascript
复制
@JavascriptInterface
代码语言:javascript
复制
String getUnderScore();

}

代码语言:javascript
复制

  1. 将此java接口绑定到duktape实例中的js接口。

代码语言:javascript
复制
```javascript

duktape.bind("helper",DuktapeHelper.class,);

代码语言:javascript
复制

  1. 使用之前注入的helper接口在duktape中实现modSearch函数。

代码语言:javascript
复制
```javascript

duktape.evaluate("Duktape.modSearch =函数(id) {\n“+

代码语言:javascript
复制
                "  if (id == \"underscore\") {" +
代码语言:javascript
复制
                "  return helper.getUnderScore();" +
代码语言:javascript
复制
                "  } " +
代码语言:javascript
复制
                "   throw new Error('cannot find module: ' + id);" +
代码语言:javascript
复制
                "  };" +
代码语言:javascript
复制
            "var _ = require('underscore')._; ");
代码语言:javascript
复制
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49851354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档