1

我正在为 Android 使用 J2V8 端口(https://github.com/eclipsesource/J2V8)。

是否可以启用上下文方法(setInterval、setTimeout、..)?

V8 runtime = V8.createV8Runtime("global");
runtime.executeIntegerScript("setInterval(function() { 
console.log(\"Hello\"); }, 1000)");

它失败并出现错误:“ReferenceError:未定义 setInterval”。

或者引擎只能执行纯javascript?

4

1 回答 1

1

V8 引擎只能执行纯 JavaScript。但是你模仿相同,通过在引擎中注册 setTimeout 方法,当你得到这个函数的调用时,你可以调度。喜欢以下。但是你必须使用 Executors.newSingleThreadScheduledExecutor()

private var setTimeOutCallback: JavaCallback = JavaCallback { _, v8Array ->
    val v8Function = v8Array.getObject(0) as V8Function
    val time = v8Array.getInteger(1).toLong()
    val taskId = Random.nextInt(1000, 9999)
    val task = v8Executor.schedule({
        v8Function.call(runtime, null)
    }, time, TimeUnit.MILLISECONDS)
    taskId
}
于 2018-11-02T10:08:48.213 回答