Я пытаюсь использовать Duktape
для привязок Android и JavaScript.
Я следовал приведенной здесь документации https://wiki.duktape.org/HowtoModules.html, и в соответствии с шагами у меня есть следующий код вызова:
DuktapeContext::DuktapeContext(JavaVM* javaVM)
: m_context(duk_create_heap(nullptr, nullptr, nullptr, &m_context, fatalErrorHandler))
, m_objectType(m_javaValues.getObjectType(getEnvFromJavaVM(javaVM))) {
if (!m_context) {
throw std::bad_alloc();
}
duk_module_duktape_init(m_context); //<~~~ adds support for `require()`
// Stash the JVM object in the context, so we can find our way back from a Duktape C callback.
duk_push_global_stash(m_context);
duk_push_pointer(m_context, javaVM);
duk_put_prop_string(m_context, -2, JAVA_VM_PROP_NAME);
duk_pop(m_context);
}
duk_module_duktape_init
определяется так (готово, я не редактировал это):
/* Register `require` as a global function. */
duk_eval_string(ctx,
"(function(req){"
"var D=Object.defineProperty;"
"D(req,'name',{value:'require'});"
"D(this,'require',{value:req,writable:true,configurable:true});"
"D(Duktape,'modLoaded',{value:Object.create(null),writable:true,configurable:true});"
"})");
duk_push_c_function(ctx, duk__require, 1 /*nargs*/);
В моем javascript
файле sample.js
У меня естьследующая строка:
var mod = require('tester');
, которая при оценке скрипта через Duktape выдает исключение Caused by: com.squareup.duktape.DuktapeException: TypeError: undefined not callable at JavaScript.eval
(строка, в которой вызывается require()
)
Должен ли я также реализовать функцию Duktape.modSearch()
?Я думал, что смогу уйти, просто используя require()
?