Android 的 J2V8,上下文方法

J2V8 for Android, context methods

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

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

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

失败并出现错误:"ReferenceError: setInterval is not defined"。

或者引擎只能执行纯 javascript?

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
}