国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現H5與Native交互的兩種方式

2019-12-12 04:15:21
字體:
來源:轉載
供稿:網友

前言

大家都知道在Android WebView使用中,經常需要H5頁面和Native頁面進行交互,比如在網頁上點擊分享按鈕,調用本地分享接口進行分享,分享成功后本地調用網頁的JavaScript代碼展示一條分享成功的消息。下面來看看一起看看兩種實現方式是什么?

一、Url攔截的方式

重寫ShouldOverrideUrl進行Url攔截,這種方式通過H5和Native協商好的Url格式來表明H5頁面想要Native進行的操作,比如撥打電話,播放視頻,查看某個用戶的信息等操作,每種操作對應一種url格式,比如:

“/media/image/123”代表H5要調用Native查看id為123的圖片;“/webapp/close/webview”表示H5需要Native關閉當前頁面;“/webapp/patient_card/?patient_id=345”表示H5要調用Native顯示用戶345的詳情頁

可以通過url的parameter傳遞參數,并通過Uri.parse進行解析。返回true表示截斷對該Url請求的響應。

protected WebViewClient mWebClient = new WebViewClient() { @Override  public boolean shouldOverrideUrlLoading(WebView view, String url) {    // 添加tel鏈接響應  if (url.startsWith("tel:")) {    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));    startActivity(intent);    return true;  }  // 添加mp4播放相應  if (url.endsWith(".mp4")) {    viewVideo(url);    return true;  }  // 添加圖片鏈接響應  if (Pattern.compile("/media/image").matcher(url).find()) {    viewImage(url);    return true;  }  // 關閉webview  if (Pattern.compile("/webapp/close/webview").matcher(url).find()) {      onBackPressed();    return true;  }  // 添加某個特殊url的響應  if(Pattern.compile("/webapp/patient_card/").matcher(url).find()) {    Uri uri = Uri.parse(url);    String patientId = uri.getQueryParameter("patient_id");   viewPatientInfo(patientId);   return true;  }  return super.shouldOverrideUrlLoading(view, url);   };

二、JavaScript注入方式

相比于Url攔截的方式,JavaScript注入的方式更加直接,Native將開放給H5調用的函數注入JavaScript,H5通過JavaScript調用Native函數完成操作。

1、獲取webView的WebViewSettings設置,調用setJavaScriptEnabled開啟JavaScript調用。

WebSettings settings = mWebView.getSettings();settings.setJavaScriptEnabled(true);

2、將需要暴露給JavaScript的函數前面添加@JavascriptInterface注解,只有添加了該注解的函數才能被JavaScript調用。

public class WebAppInterface { @JavascriptInterface public boolean method1(String param1, String param2) {   // do something } @JavascriptInterface public boolean method2(String param1, String param2) {   // do something }}

3、通過WebView的addJavascriptInterface方法,將Native方法所在的class注入到JavaScript中。該函數的第一個參數是注入的Native對象,第二個參數是該對象的名字,JavaScript通過改名字訪問該對象

WebView webView = (WebView) findViewById(R.id.webview);webView.addJavascriptInterface(new WebAppInterface(), "InterfaceName");

4、這樣,H5頁面就可以通過下面的JavaScript調用Native的函數了

<script type="text/javascript">  function method1(param1, param2) {    InterfaceName.method1(param1, param2);  }</script>

Native調用JavaScript

Native調用JavaScript函數的方法比較簡單,通過loadUrl函數進行:

// 無參數調用contentWebView.loadUrl("javascript:javacalljs()");// 有參數調用mWebView.loadUrl("javascript:test('" + param+ "')"); // param是js的函數test()的參數

總結

以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發者們能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康平县| 霍林郭勒市| 旺苍县| 平和县| 吉首市| 拜泉县| 桐乡市| 大埔区| 聂荣县| 公主岭市| 顺平县| 武汉市| 顺昌县| 始兴县| 苗栗县| 抚远县| 东丰县| 安丘市| 台中县| 梁平县| 阳西县| 洪湖市| 阿瓦提县| 清水河县| 宽城| 吉水县| 四平市| 瑞安市| 石河子市| 南川市| 临夏县| 左贡县| 昌吉市| 河北区| 繁昌县| 正定县| 海盐县| 靖安县| 永州市| 吉木乃县| 石渠县|