javascript - Android 中使用 Kotlin 和 Duktape 的 JS 扩展语法

标签 javascript android kotlin duktape

我正在使用Duktape在我的 Android 应用程序中运行 JS 代码。我正在尝试在 JS 中实现一个日志函数,它接收多个 varargs 参数。 运行代码时出现异常:

方法抛出“com.squareup.duktape.DuktapeException”异常。 语法错误:预期标识符(第 3 行)

Duktape 是否支持 Spread syntax ?一般情况下是否支持 Kotlin 选项?

//JS code
"""
    var Console = {
        log : function(...args) {
            __consoleImpl.log(args);
                    }
            };
"""

//Kotlin interface
interface Console {

    fun log(arg1:String? = null, arg2:String? = null, arg3:String? = null, arg4:String? = null,
            arg5:String? = null, arg6:String? = null, arg7:String? = null, arg8:String? = null,
            arg9:String? = null, arg10:String? = null)
}


//Interface impl
class ConsoleImpl() : Console {

    override fun log(arg1: String?, arg2: String?, arg3: String?, arg4: String?, arg5: String?, arg6: String?, arg7: String?, arg8: String?, arg9: String?, arg10: String?) {
    val values = listOfNotNull(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10).map {it.toString()}.filter { it != "undefined" }
    Log.d("ConsoleImpl", values.joinToString())
    }
}

//in setup
duktape.set("__consoleImpl", Console::class.java, ConsoleImpl())
duktape.evaluate("Console.log("message")) //exception thrown here

最佳答案

duktape 仅完全支持 ES5,以及 ES6 和 ES7 的一些功能 ( see post ES5 features )。扩展语法是 ES6 的一项功能。

关于javascript - Android 中使用 Kotlin 和 Duktape 的 JS 扩展语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61082566/

相关文章:

javascript - 单击对象时显示信息的方式

javascript - 解析: Compound Query on Followers times out

javascript - backbone.js model.save 没有设置 id

android - 尝试在 android 中添加两个 setContentView 时出现空指针异常

android - 授权 Android 游戏 - 应用程序 ID 在哪里?

android - 输入 :checked ~ div. 子菜单 Android 浏览器 4.4.2

android - generateSafeArgsDebug 任务执行时出错,XmlPullParserException 仅允许空白内容

kotlin - Corda - 包含该软件包的 CorDapp 不止一个

android - 如何使用 kotlin Android 从 Url 读取 JSON?

javascript - 通过javascript调用MVC操作方法但不使用AJAX