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
}
我正在为 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
}