移動(dòng)開發(fā)中,我們經(jīng)常會遇到混合開發(fā)模式,經(jīng)常是在移動(dòng)客戶端中增加網(wǎng)頁,來減少客戶端的壓力,同時(shí)也讓軟件更加靈活。廢話少說,下面直接進(jìn)入主題。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、杏花嶺網(wǎng)絡(luò)推廣、微信小程序開發(fā)、杏花嶺網(wǎng)絡(luò)營銷、杏花嶺企業(yè)策劃、杏花嶺品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供杏花嶺建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
webView.getSettings().setAppCachePath(getCacheDir().getAbsolutePath());
webView.getSettings().setAppCacheEnabled(true);
if (Constant.DEBUG) {
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
}
if (Build.VERSION.SDK_INT = Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
//參數(shù)1 定義Android 與js交互的接口, 參數(shù)2 與js交互的一個(gè)常量,可以是任意一個(gè)常量字符串,
但是h5網(wǎng)頁調(diào)用的時(shí)候需要增加這個(gè)參數(shù)二:handler
public class JSInterface{
@JavascriptInterface//這個(gè)標(biāo)注必須加上 表示js要調(diào)用的方法,可以自動(dòng)識別
public void getShareInfo(String strings) {
//todo android dosomething
}
}
那么 js端該如何調(diào)用這個(gè)方法呢\
android 和ios的調(diào)用方法不一樣 因此 h5里面需要區(qū)別andorid和ios機(jī)型來分別調(diào)用移動(dòng)端方法
如android:
//handler 是與android 約定的常量(最好做成全局通用的常量)
//getShareInfo 是與android 定義的調(diào)用方法
以上常量、方法、參數(shù)類型 必須一致才能成功調(diào)用
WebView提供兩個(gè)事件回調(diào)類給應(yīng)用層,分別為WebViewClient,WebChromeClient開發(fā)者可以繼承
這兩個(gè)類,接手相應(yīng)事件處理。WebViewClient 主要提供網(wǎng)頁加載各個(gè)階段的通知,比如網(wǎng)頁開始
加載onPageStarted,網(wǎng)頁結(jié)束加載onPageFinished等;WebChromeClient主要提供網(wǎng)頁加載過程
中提供的數(shù)據(jù)內(nèi)容,比如返回網(wǎng)頁的title,favicon等。
有需要監(jiān)聽加載網(wǎng)頁進(jìn)度
//需要webBar的可以自定義增加一個(gè)webBar
最后,就是大家都知道的webView.loadUrl(url);//url需要加載的網(wǎng)頁
那么,如何在android調(diào)用js的方法呢
//getMsg() 為js里面暴露的方法
在銷毀的時(shí)候:
protected void onDestroy() {\
super.onDestroy();\
if (webView != null) {\
webView.loadUrl("about:blank");\
webView.destory();\
}\
}
1、Android 調(diào)用js
mAgentWeb.getJsAccessEntrace().quickCallJs(" ");
quickCallJs("方法名",參數(shù)...);
方法名不帶 ()
例:
js方法? ?getJs()
mAgentWeb.getJsAccessEntrace().quickCallJs("getJs ");
js方法? ?getJs(var a,var b)
mAgentWeb.getJsAccessEntrace().quickCallJs("getJs?",a,b);?
2、js調(diào)用Android
mAgentWeb.getJsInterfaceHolder().addJavaObject("android",new Class());
js調(diào)用 window.android.方法名(參數(shù))
Android中提供的方法 需要添加注解? @JavascriptInterface
1、設(shè)置webview對js的支持
2、在html中添加 evaluateNativeToJS 方法
3、在Android中調(diào)用 evaluateNativeToJS 方法
1、創(chuàng)建js調(diào)用的接口(添加js要調(diào)用的方法 evaluateJsToNative)
2、設(shè)置webview對js的支持
3、js調(diào)用 evaluateJsToNative方法