Android 与 JavaScript 交互 支撑的数据类型

《Android 与 JavaScript 交互 支撑的数据类型》

在Android夹杂开辟中,WebView是中间件,承担著衬着网页的职责。

WebView的运用教程拜见官网Carson_Ho的这篇博客

当须要Android原生与H5之间交互的时刻,须要挪用WebView的getSettings().setJavaScriptEnabled(true);以及webView.addJavascriptInterface(Js对象名,Java对象);

前者许可Android原生与H5之间的交互,后者将Java对象映照为JavaScript的对象。

假定被映照为JavaScript对象的Java对象长的像如许:

/*
* 作为addJavascriptInterface()要领的第二个参数,该类将被映照为JavaScript对象
*/
public class MyJavaScriptObject{
        
        public void toastShort(){
                Toast.maskText(context,"吐个司",Toast.LENGTH_SHORT).show();
        }
        
        @JavascriptInterface
        public void toastLong(){
                Toast.maskText(context,"吐个司",Toast.LENGTH_LONG).show();
        }
        
        @JavascriptInterface
        public void question1(ClassA param){
                //use param
        }
        
        @JavascriptInterface
        public ClassB question2(){
                //return object of ClassB
                return new ClassB();
        }
}

则:

  1. toastShort()要领在JavaScript中不可用,由于该要领没有被@JavascriptInterface注解标记;
  2. ClassA只能是Java的内置范例或String,不然param为null、或为undefined(当用String吸收时);
  3. ClassB只能是Java的内置范例或String,不然JavaScript吸收的是{};

也就是说:

  1. JS挪用Android原生要领,参数须是Java的内置范例:int、String等,如果JavaScript对象,需字符串化,不然Android没法准确吸收;
  2. JS挪用Android原生要领,返回值是内置范例:int、String等,JS能够准确吸收。如果Java自定义范例,则JS吸收不到准确数据;
  3. JS能够经由过程Android原生要领的返回值猎取内置范例的参数,如String
  4. 若须要互传庞杂范例的对象,两边须以String对序言,以各自言语的Json东西类举行互相转化;

拜见:
https://stackoverflow.com/questions/2250917/passing-a-javascript-object-using-addjavascriptinterface-on-android

    原文作者:键笔刀
    原文地址: https://segmentfault.com/a/1190000018767529
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞