android js交互_安卓原生和js交互的4种方式 java和js交互 安卓JsBridge原理解析

JsBridge:安卓和javascript最流行的交互方式,有以下4种方式可以实现交互传值

  • 1,addJavascriptInterface:针对Android 4.2(API 17)及以上,只有标有@JavascriptInterface注解的public方法才能从js调用。而对targetSdkVersion为API Level 16及以下的app,js可以调用Java所有的public方法。
  • 通过public void addJavascriptInterface (Object object, String name)方法把对象传递给js,
  • 2, loadUrl:可以实现安卓调用js,通过webview.loadUrl("javascript:jsMethod()");字符串里的javascript: 是固定写法,后面的jsMethod可以替换成你js代码里的方法。也可以通过"javascript:jsMethod(" + jsonParams + ")";传递数据给js。这个缺点:如果js方法返回数据,这里会发生重定向。解决办法是用evaluateJavascript
  • 3,evaluateJavascript:安卓4.4以后可以实现安卓调用js,安卓可以传数据给js,并且可以获取js方法的返回值。
  • 缺点:必须大于api19(4.4)才可以使用
  • 4,shouldOverrideUrlLoading:通过这个方法拦截url,并解析url携带的参数,如:qiushi://setH5Info?params={"title"%3A"商品详情"}

js调用安卓

  • webView.addJavascriptInterface()
  • WebViewClient.shouldOverrideUrlLoading()

安卓调用js

  • webView.loadUrl();
  • webView.evaluateJavascript()

下面我门结合代码具体讲解下这4中方式的具体代码实现

  • 首先我们要在androidstudio的assets文件夹下面定义下面html。
85f64569ffee4710b8813a29dbf6ba5e
 Untitled Document

一,addJavascriptInterface 实现js调用安卓

  • 针对Android 4.2(API 17)及以上
  • js可以调用安卓方法
  • 通过调用安卓方法可以实现安卓向js传递数据
  • 要被js调用的方法必须加@JavascriptInterface注释
  • 使用这个方法前必须设置webview.getSettings().setJavaScriptEnabled(true);

主要通过

public void addJavascriptInterface(Object object, String name) {}方法实现js调用安卓原生代码,简单讲解下两个参数。

object:安卓对象

name:安卓对象的别名。

如我们定义

webview.addJavascriptInterface(JavaH5Activity.this, "androidObject");就是把JavaH5Activity的实例命名为androidObject传递给js。

我们在js里的调用如下

完整代码如下:

public class JavaH5Activity extends AppCompatActivity { private WebView webview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_java_h5); webview = findViewById(R.id.webview); String url = "file:///android_asset/h5demo2.html"; webview.loadUrl(url); //1,js调用安卓 webview.getSettings().setJavaScriptEnabled(true);//这里必须开启 //把当前JavaH5Activity对象作为androidObject别名传递给js //js通过window.androidObject.androidMethod()就可以直接调用安卓的androidMethod方法 webview.addJavascriptInterface(JavaH5Activity.this, "androidObject"); } //js调用安卓,必须加@JavascriptInterface注释的方法才可以被js调用 @JavascriptInterface public String androidMethod() { Log.i("qcl0228
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,为了实现在Web页面中与iOS和Android原生应用程序之间的交互,可以使用JSBridgeJSBridge是一个桥接工具,可以将JavaScript与原生应用程序之间的通信连接起来。 在iOS中,可以使用JavaScriptCore框架和WKWebView来实现JSBridge。在Android中,可以使用WebViewJavaScriptInterface来实现JSBridge。 具体来说,需要在原生应用程序中创建一个JavaScriptInterface类,该类可以实现JavaScript与原生代码之间的通信。然后在Web页面中,可以通过JavaScript调用原生应用程序中的方法。 例如,在iOS中,可以使用以下代码创建一个JavaScriptInterface类: ``` @objc class JSInterface: NSObject { weak var webView: WKWebView? init(webView: WKWebView) { self.webView = webView super.init() } @objc func showToast(_ message: String) { let alertController = UIAlertController(title: "Toast", message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "OK", style: .default, handler: nil) alertController.addAction(okAction) self.webView?.viewController?.present(alertController, animated: true, completion: nil) } } ``` 然后在Web页面中,可以通过以下代码调用原生应用程序中的showToast方法: ``` window.webkit.messageHandlers.jsInterface.postMessage({action: 'showToast', message: 'Hello world!'}); ``` 在Android中,可以使用以下代码创建一个JavaScriptInterface类: ``` public class JSInterface { private Context context; public JSInterface(Context context) { this.context = context; } @JavascriptInterface public void showToast(String message) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } } ``` 然后在Web页面中,可以通过以下代码调用原生应用程序中的showToast方法: ``` window.jsInterface.showToast('Hello world!'); ``` 通过这方式,可以实现JavaScript与iOS和Android原生应用程序之间的交互

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值