在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();
}
}
则:
-
toastShort()
要领在JavaScript中不可用,由于该要领没有被@JavascriptInterface
注解标记; - ClassA只能是Java的内置范例或String,不然param为null、或为undefined(当用String吸收时);
- ClassB只能是Java的内置范例或String,不然JavaScript吸收的是{};
也就是说:
- JS挪用Android原生要领,参数须是Java的内置范例:int、String等,如果JavaScript对象,需字符串化,不然Android没法准确吸收;
- JS挪用Android原生要领,返回值是内置范例:int、String等,JS能够准确吸收。如果Java自定义范例,则JS吸收不到准确数据;
- JS能够经由过程Android原生要领的返回值猎取内置范例的参数,如String
- 若须要互传庞杂范例的对象,两边须以String对序言,以各自言语的Json东西类举行互相转化;