标签: duktape

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

我正在使用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()
}
Run Code Online (Sandbox Code Playgroud)

javascript文件是使用Browserify创建的,因此它是一个包含所有内容的单个文件,并且工作正常.但是我需要从模块中请求一个模块和一个方法,例如:

var test = require('testjs-lib');
test.EVPair.makeRandom().toWTF();
Run Code Online (Sandbox Code Playgroud)

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

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

有没有人成功地做过这件事可以解释一下这个问题?

javascript java android kotlin duktape

11
推荐指数
1
解决办法
580
查看次数

将c ++类导出到duktape

说我有一个c ++类Point

class Point {
public:
    Point();
    Point(float x, float y);
    ~Point();

    float X;
    float Y;

};
Run Code Online (Sandbox Code Playgroud)

我想添加javascript功能并选择duktape.

是否可以在JavaScript中重用此类?说

var p = new Point(1.23, 4.56);
Run Code Online (Sandbox Code Playgroud)

我一直在阅读duktape文档,它只说如何重用javascript中的函数.

javascript c++ duktape

8
推荐指数
1
解决办法
3208
查看次数

Duktape 可以发出 http 请求吗

我在另一个程序中嵌入了一个非常简单的 duktape 插件。简单的东西有效,但我不确定如何发出 HTTP 请求。甚至可以从 Duktape VM 内发出 HTTP 请求吗?

duktape

5
推荐指数
1
解决办法
1527
查看次数

在 Duktape 中迭代未知对象

所以我有这个 duktape 函数,它接受一个对象作为参数之一。在正常情况下,要检索每个对象属性的值,我会使用duk_get_prop()and duk_push_string(),但是这假设我事先知道我得到的对象的结构。

现在,考虑一个接受结构未知的对象的函数。我需要迭代它的键,并检索它的所有值。

我正在尝试将这样的对象转换为 C++std::map<string, string> 例如,从 Javascript 调用 myFunction({x: 1, y: 3, z: 35})应该和myFunction({foo: 12, bar: 43}).

似乎这duk_enum()将是一个合适的功能,但我不太了解它是如何工作的。

c++ duktape

5
推荐指数
1
解决办法
532
查看次数

为什么 `require` 会导致 Duktape 出错?

我正在使用 Duktape 嵌入 JavaScript,但使用require总是会导致错误:

int main(){
  duk_context *ctx = duk_create_heap_default();
  duk_peval_file(ctx, "example.js");
  printf("file load err %s", duk_safe_to_string(ctx, -1));
  duk_destroy_heap(ctx);
}
Run Code Online (Sandbox Code Playgroud)

例子.js

var mylib = require("mylib")
print (mylib.hello)
Run Code Online (Sandbox Code Playgroud)

mylib.js

exports.hello = "Hello"
Run Code Online (Sandbox Code Playgroud)

错误:

文件加载错误类型错误:不可调用

堆栈转储 说:

duk_js_call.c:682
需要本机严格的preventyield
eval example.js:1 preventyield

javascript duktape

4
推荐指数
1
解决办法
1291
查看次数

如何使用duktape使用可变数量的参数创建本机javascript函数?

使用duktape javascript实现,您可以将本机C函数公开给javascript并实现它们,如下所示:

static duk_ret_t native_prime_check(duk_context *ctx) {
   int arg1 = duk_require_int(ctx, 0);
   int arg2 = duk_require_int(ctx, 1);
   // do something.
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

在公开本机函数时,我们需要指定参数的数量.

duk_push_c_function(ctx, native_prime_check, 2 /*nargs*/);
Run Code Online (Sandbox Code Playgroud)

请举例说明如何创建一个C函数,该函数接受可变数量的参数并使用duktape将其公开给Javascript.

duktape

3
推荐指数
1
解决办法
607
查看次数

Duktape - 在C中捕获错误

我今天刚开始在我的C++框架中使用Duktape,我已经阅读了整个api而无法理解我如何捕获错误.我找到了一些关于放在堆栈上的错误对象的线索但是,每次出现错误时(例如无效的javascript语法),一切都变得疯狂,我得到了一个SEGFAULT.

我目前正在使用duk_eval函数评估一些js行

这是我的代码行:

duk_push_string(ctx,"pouet");
duk_eval(ctx);
Run Code Online (Sandbox Code Playgroud)

ctx 是您在创建duktape堆时提供的基本上下文

使用try-catch不会捕获任何东西

任何的想法?

提前致谢

javascript c c++ try-catch duktape

2
推荐指数
1
解决办法
1290
查看次数

Postgres在SQLite中等效搜索JSON对象

我有以下Postgres查询:

db.queryAsync('SELECT _id, value FROM ' + store + ' WHERE (value->>$1)=$2;', [index, id]);
Run Code Online (Sandbox Code Playgroud)

我想在SQLite中写相同的内容.我已将值字段创建为TEXT类型,但后来不确定如何查询.我正在使用在Duktape上运行的SQLite和JavaScript.

sqlite json duktape

2
推荐指数
1
解决办法
1689
查看次数

标签 统计

duktape ×8

javascript ×4

c++ ×3

android ×1

c ×1

java ×1

json ×1

kotlin ×1

sqlite ×1

try-catch ×1