Skip to content

js调用Java方法

js或是ts调用Java方法。

Java端

首先js和Java之间约定一个接口名,这里叫做androidInterface

Java端要给WebView添加js接口。即调用addJavascriptInterface方法。

WebView加载本地存储的网页基础上,我们对WebView进行设置。

WebView webView = findViewById(R.id.web2);
webView.addJavascriptInterface(this, "androidInterface"); // 添加接口
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowContentAccess(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);

上面的this是activity,在这个activity中我们新增2个Java方法。

import android.webkit.JavascriptInterface;

@JavascriptInterface
public String getStringInfo() {
    return Build.BRAND;
}

@JavascriptInterface
public String getOneJson() {
    return new Gson().toJson(new User((int) System.currentTimeMillis(), true, "default rule", 3));
}
方法都添加了@JavascriptInterface注解。并且返回的都是字符串。

如果要传送对象,可以转换为json字符串来传送。

这样Java方面就准备完毕了。

网页端

前端调用Java方法需要借助window。ts或者js都用到window

上面我们约定了使用androidInterface为接口名。调用方法如window.androidInterface

例如typescript调用Java方法。

callNative(): string {
    let result = window.androidInterface.getStringInfo();
    return result;
}

getOneObject(): User {
    let json = window.androidInterface.getOneJson();
    let user: User = JSON.parse(json);
    return user;
}

js的也类似,使用window.androidInterface

作者: RustFisher
联系: rf.cs@foxmail.com
博客: rustfisher.com | RustFisher cnblog
示例: AndroidTutorial Gitee, Tutorial Github
链接: https://www.an.rustfisher.com/android/ui/view/webView/call-java-function/
一家之言,仅当抛砖引玉。如有错漏,还请指出。