日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

android应用js

發布時間:2025/3/14 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android应用js 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

通過?WebViewClient?的方法shouldOverrideUrlLoading ()回調攔截 url

  • 具體原理:?

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

    即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>
  • 當該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); } } ); } }

轉載于:https://www.cnblogs.com/wcLT/p/7845455.html

總結

以上是生活随笔為你收集整理的android应用js的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。