前言:隨著前端技術(shù)越來越火敢朱。許多app中不在是簡單的Android原生應用功舀,加入了很多web頁令漂。通過android的webView加載一個html挂据。并且我們通常的一些落地頁都是用html顯示的。那么對于一些具有特殊功能的落地頁泡躯。比如具有引導注冊功能的巫击,用戶點擊落地頁之后跳轉(zhuǎn)App的注冊頁面,或者登錄頁面精续。那么坝锰,這就需要html和Android原生進行交互,相互調(diào)用重付。
原理分析
android調(diào)用javascript方法:
直接通過webView.loadUrl("JavaScript:show('"+et.getText().toString()+"')");,其實就是直接通過loadUrl()方法顷级,傳入javascropt:+方法名。
javascript調(diào)用Android方法
(1)定義一個對象确垫,包含js需要調(diào)用方法的定義和實現(xiàn)弓颈。
(2)webView.addJavascriptInterface(new Object(), "obj");傳入。
(3)js調(diào)用删掀。
使用方法
(1)定義Android對象
首先需要定義一個類翔冀,該類主要用于定義一些方法(接口),以便js調(diào)用披泪。
private? classObject {
@JavascriptInterface
public void intent2Activity(String activity){
if(activity.equals("login")){
Intent intent =new Intent(MainActivity.this,LoginActivity.class);
startActivity(intent);
}
}
@JavascriptInterface
public void showDialog(String str){
AlertDialog dialog =newAlertDialog.Builder(MainActivity.this)
.setTitle("消息")
.setMessage(str)
.setPositiveButton("確定",null)
.setNegativeButton("取消",null)
.create();
dialog.show();
}
}
定義了兩個方法纤子,一個是跳轉(zhuǎn)activity的方法,另一個是顯示消息的方法。
注意:方法前一定要加上注解@JavascriptInterface控硼,不然會沒有效果泽论。
在Activity中加入webView,并查找控件卡乾,進行一些初始化操作
@SuppressLint("JavascriptInterface")
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = ((EditText) findViewById(R.id.et));
//加載頁面
webView = (WebView) findViewById(R.id.webView);
//允許JavaScript執(zhí)行
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDefaultTextEncodingName("utf-8");
// 添加一個對象, 讓JS可以訪問該對象的方法
webView.addJavascriptInterface(newObject(),"obj");
//找到Html文件翼悴,也可以用網(wǎng)絡(luò)上的文件
webView.loadUrl("file:///android_asset/index.html");
}
webView.addJavascriptInterface(new Object(), "obj");相當于向html中傳入了定義的接口對象,對象名為obj幔妨。
定義Html對象
因為我用的是android studio鹦赎,所以在main目錄下創(chuàng)建目錄assets,并創(chuàng)建文件index.html