美文网首页
Android 与 JavaScript 交互 支持的数据类型

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

作者: 已迁至知乎_此不再维护 | 来源:发表于2019-04-04 17:44 被阅读0次
    from flickr.com

    在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

    相关文章

      网友评论

          本文标题:Android 与 JavaScript 交互 支持的数据类型

          本文链接:https://www.haomeiwen.com/subject/jvsqiqtx.html