android与js交互
首先引用一篇文章,看過這篇文章基本上就明白android大致與js是如何交互的了
Android與HTML+JS交互入門
----------------------------分割線-----------------------------------
首先要知道js是啥,js就相當于在html內的函數方法,全稱為javascript
那么要交互,必然二者要共存于一起,在android中如何打開一個頁面,比較常用的方法就是使用一個WebView控件,用它來加載網頁
交互也必然是雙方的,有來有往,下面分兩部分說明
PS:這里直接援引前面文章中的例子,稍作修改
1,android中調用js
那么首先得有js,不然怎么調用,所以html如下
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=gb2312"> <script type="text/javascript">function javacalljs(){document.getElementById("content").innerHTML ="<br\>JAVA調用了JS的無參函數"; }function javacalljswith(arg){document.getElementById("content").innerHTML =("<br\>"+arg); } </script> </head> <body> HTML 內容顯示 <br/> <h1><div id="content">內容顯示</div></h1> </body> </html>這里需注意的是,兩個方法的名稱需要與之后調用的名稱相同:javacalljs,javacalljswith
那么將它放入工程內,或是部署在服務器上,隨后在webView中加載這個url
這里只寫出webView加載該url的代碼
contentWebView = (WebView) findViewById(R.id.webview);// 啟用javascriptcontentWebView.getSettings().setJavaScriptEnabled(true);// 從assets目錄下面的加載htmlcontentWebView.loadUrl("file:///android_asset/web.html");這里因為作者使用的是放入工程的方法,故而loadUrl方法內傳遞的是一個本地的相對地址
到這里webView加載網頁就完成了,那么如何使用webView調用其中的js呢
contentWebView.loadUrl("javascript:javacalljs()");亦或者是
contentWebView.loadUrl("javascript:javacalljswith(" + "'http://blog.csdn.net/Leejizhou'" + ")");兩者都是之前在html內定義過的js函數名,一個有參一個無參(這里為尊重援引博文的作者,參數內的博客地址就不修改了)
到這為之,android中調用js就完成了
那么交互交互,反過來,如何在html代碼內與android交互呢
修改一下html的代碼
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=gb2312"> </head> <body> HTML 內容顯示 <br/> <h1><div id="content">內容顯示</div></h1> <br/> <input type="button" value="點擊調用java代碼" onclick="window.android.startFunction()" /> <br/> <input type="button" value="點擊調用java代碼并傳遞參數" onclick="window.android.startFunction('http://blog.csdn.net/Leejizhou')" /> </body> </html>這里可以看到,正如學習android時,在xml頁面內寫onclick來綁定點擊方法一樣,html用的也是這種方法,只是不同的是這里面需要輸入的不止是一個方法名,而是window.變量名.方法名
方法名自不用說,至于什么是變量名,先看下面的代碼
首先webView的初始化要改成如下代碼
contentWebView = (WebView) findViewById(R.id.webview);// 啟用javascriptcontentWebView.getSettings().setJavaScriptEnabled(true);// 從assets目錄下面的加載htmlcontentWebView.loadUrl("file:///android_asset/web.html");contentWebView.addJavascriptInterface(MainActivity.this,"android");最后一行添加js接口的時候,后面的“android”就是之前說的變量名
那么再往下,就需要定義這個方法了
//由于安全原因 targetSdkVersion>=17需要加 @JavascriptInterface //JS調用Android JAVA方法名和HTML中的按鈕 onclick后的別名后面的名字對應 @JavascriptInterfacepublic void startFunction(){runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,"show",3000).show();}});}@JavascriptInterfacepublic void startFunction(final String text){runOnUiThread(new Runnable() {@Overridepublic void run() {new AlertDialog.Builder(MainActivity.this).setMessage(text).show();}});}做到這,js就可以調用本地android中的方法了,這就實現了交互的過程
當然這里的交互非常簡單,如果需求不一樣,還需要修改,例如調用js時使用evaluateJavascript()會使得網頁不刷新并且較為容易獲得返回值等等
這方面在這篇文章中講的很透徹,這里也直接引用
Android:你要的WebView與 JS 交互方式 都在這里了
?
轉載于:https://www.cnblogs.com/Qunter/p/7105683.html
總結
以上是生活随笔為你收集整理的android与js交互的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 高德、百度、GPS经纬度转换
 - 下一篇: wxParse空格解析不生效的解决方案