android应用js
生活随笔
收集整理的這篇文章主要介紹了
android应用js
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.csdn.net/carson_ho/article/details/64904691
通過?WebViewClient?的方法shouldOverrideUrlLoading ()回調攔截 url
-
具體原理:?
- Android通過?WebViewClient?的回調方法shouldOverrideUrlLoading ()攔截 url
- 解析該 url 的協議
- 如果檢測到是預先約定好的協議,就調用相應方法?
-
具體使用:?
步驟1:在JS約定所需要的Url協議?
JS代碼:javascript.html以.html格式放到src/main/assets文件夾里
?
即JS需要調用Android的方法
- 當該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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有许多部分没有在cgroup中显示啊,c
- 下一篇: 洛谷 P2908 [USACO08OPE