Android (Arctic Fox P2) Kotlin WebView.addJavascriptInterface

Android (Arctic Fox P2) Kotlin WebView.addJavascriptInterface

1. 自定义需要注入Webiew的JavascriptObject:

// 继承Object基类
class JavascriptObject: Object(){

    public fun doBefore(arg: Any?){
    }

    // 注解1
    @JavascriptInterface
    public fun do(arg: String?){
    }
}

2. 往Webiew注入Javascript Interface类:

// 注解2
@SuppressLint("JavascriptInterface")
private fun addJavascriptInterfaceObject(){
    val object1 = JavascriptObject()
    // 自定义参数: arg
    lateinit var arg: Any? 
    object1.doBefore(arg)
    // 自定义调用的Javascript Interface类JavascriptObject的别名——在Javascript调用中使用的名称
    webView.addJavascriptInterface(object1, "jsio")
}

3. 在Javascript中调用Javascript Interface类JavascriptObject方法do(arg: String?):

// 自定义传入参数arg
lateinit var arg: String?
var html: String = """Test

"""
html += """

"""

 如果不需要混淆该类可以在build.gradle (:app)文件定义的规则文件

proguard-rules.pro或
proguard-android-optimize.txt

中进行注释。

gradle.build (:app):

android {
    compileSdkVersion 30
    buildToolsVersion "31.0.0"
    defaultConfig {
        applicationId "com.mr.n.x"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

 proguard-rules.pro:

-keep class androidx.annotation.Keep

给之前自定义的Javascript Interface类JavascriptObject标注@Keep:

@Keep
class JavascriptObject: Object() {
    // ...
}

注解1:

@JavascriptInterface需要标注在Javascript调用的方法定义前。

注解2:

@SuppressLint("JavascriptInterface")需要添加在调用WebView.addJavascriptInterface方法的方法前。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5710212.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存