当前位置:首页 > 行业动态 > 正文

关于Android JS调用的疑问标题,如何有效使用Android JS调用功能?

Android JS调用通常指在Android应用中通过JavaScript接口与WebView进行交互。

Android与JS相互调用详解

一、通过WebView的addJavascriptInterface()进行对象映射

1、原理:Android和JS通过webview.addJavascriptInterface(new JSKit(),"mjs")方法形成对象映射,JS中的mjs对象就可以调用Android中的JSKit对象中的方法。

2、具体使用步骤

在Android里设置映射:在Activity中,先获取WebView组件,启用JavaScript,然后通过addJavascriptInterface()方法将Java对象映射到JS对象,创建一个JSKit类,并在其中定义需要被JS调用的方法,同时加上@JavascriptInterface注解。

在JS中调用Android方法:在HTML文件中,通过JavaScript代码直接调用映射后的JS对象(即mjs)的方法,调用mjs.hello("js去调用了android中的hello方法");

3、优缺点

优点:使用简单,仅需将Android对象和JS对象映射即可实现相互调用。

关于Android JS调用的疑问标题,如何有效使用Android JS调用功能?  第1张

缺点:对于Android 4.2以下版本存在安全破绽,需要采用拦截prompt()的方式进行破绽修复;对于Android 4.2及以上版本,则需对被JS调用的函数添加@JavascriptInterface注解。

二、通过WebViewClient的shouldOverrideUrlLoading()方法回调拦截url

1、原理:Android通过WebViewClient的回调方法shouldOverrideUrlLoading()拦截URL,解析该URL的协议,如果检测到是预先约定好的协议,就调用相应方法。

2、具体使用步骤

在JS中约定URL协议:在JS代码中,通过改变window.location或document.location来约定一个特殊的URL协议,如js://webview?arg1=111&arg2=222

在Android中复写shouldOverrideUrlLoading()方法:在Activity中,复写WebViewClient的shouldOverrideUrlLoading()方法,当检测到预定的URL协议时,执行相应的操作。

3、优缺点

优点:无需对JS进行修改,只需在Android端进行配置即可实现调用。

缺点:需要在Android和JS之间约定好URL协议,且每次调用都需要进行URL拦截和解析,效率相对较低。

相关问题与解答

1、:如何在Android中保持与JS对象的映射关系,避免因页面刷新或重新加载而丢失?

:可以在Android的Activity或Fragment的生命周期方法中重新添加JS对象映射,确保在页面刷新或重新加载后仍能保持映射关系,在onResume()onStart()方法中重新调用addJavascriptInterface()方法。

2、:在使用shouldOverrideUrlLoading()方法拦截URL时,如何传递复杂的数据类型或多个参数?

:可以通过将复杂数据类型转换为JSON格式字符串,并通过URL的查询参数进行传递,在Android端接收到URL后,再将JSON字符串解析回对应的数据类型或多个参数。

0