
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方法的方法前。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)