android應用js

來源:互聯網
上載者:User

標籤:function   檔案   name   sdn   type   ext   pretty   boolean   asc   

http://blog.csdn.net/carson_ho/article/details/64904691

通過  WebViewClient 的方法 shouldOverrideUrlLoading ()回調攔截 url
  • 具體原理: 

    1. Android通過 WebViewClient 的回調方法shouldOverrideUrlLoading ()攔截 url
    2. 解析該 url 的協議
    3. 如果檢測到是預先約定好的協議,就調用相應方法 

     

    即JS需要調用Android的方法

  • 具體使用: 
    步驟1:在JS約定所需要的Url協議 
    JS代碼:javascript.html

    以.html格式放到src/main/assets檔案夾裡

<!DOCTYPE html><html>   <head>      <meta charset="utf-8">      <title>Carson_Ho</title>     <script>         function callAndroid(){            /*約定的url協議為:js://webview?arg1=111&arg2=222*/            document.location = "js://webview?arg1=111&arg2=222";         }      </script></head><!-- 點擊按鈕則調用callAndroid()方法  -->   <body>     <button type="button" id="button1" onclick="callAndroid()">點擊調用Android代碼</button>   </body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

當該JS通過Android的mWebView.loadUrl("file:///android_asset/javascript.html")載入後,就會回調shouldOverrideUrlLoading (),接下來繼續看步驟2:

步驟2:在Android通過WebViewClient複寫shouldOverrideUrlLoading ()

MainActivity.java

public class MainActivity extends AppCompatActivity {    WebView mWebView;//    Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mWebView = (WebView) findViewById(R.id.webview);        WebSettings webSettings = mWebView.getSettings();        // 設定與Js互動的許可權        webSettings.setJavaScriptEnabled(true);        // 設定允許JS彈窗        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);        // 步驟1:載入JS代碼        // 格式規定為:file:///android_asset/檔案名稱.html        mWebView.loadUrl("file:///android_asset/javascript.html");// 複寫WebViewClient類的shouldOverrideUrlLoading方法mWebView.setWebViewClient(new WebViewClient() {                                      @Override                                      public boolean shouldOverrideUrlLoading(WebView view, String url) {                                          // 步驟2:根據協議的參數,判斷是否是所需要的url                                          // 一般根據scheme(協議格式) & authority(協議名)判斷(前兩個參數)                                          //假定傳入進來的 url = "js://webview?arg1=111&arg2=222"(同時也是約定好的需要攔截的)                                          Uri uri = Uri.parse(url);                                                                           // 如果url的協議 = 預先約定的 js 協議                                          // 就解析往下解析參數                                          if ( uri.getScheme().equals("js")) {                                              // 如果 authority  = 預先約定協議裡的 webview,即代表都符合約定的協議                                              // 所以攔截url,下面JS開始調用Android需要的方法                                              if (uri.getAuthority().equals("webview")) {                                                 //  步驟3:                                                  // 執行JS所需要調用的邏輯                                                  System.out.println("js調用了Android的方法");                                                  // 可以在協議上帶有參數並傳遞到Android上                                                  HashMap<String, String> params = new HashMap<>();                                                  Set<String> collection = uri.getQueryParameterNames();                                              }                                              return true;                                          }                                          return super.shouldOverrideUrlLoading(view, url);                                      }                                  }        );   }        }

android應用js

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.