Android WebView 与 JS 交互
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
?在android activity webView的使用,activity中執(zhí)行html中的js 方法, 和在html 中 調(diào)用activity 中的java方法?
如圖 :?
上圖中 點(diǎn)擊了 ” 調(diào)用html中的js 方法“ ?后的 效果
上圖中 點(diǎn)擊了 ?html 中的 ”調(diào)用java中的方法“ ?后的 效果 這里是調(diào)用java 中的方法 彈出了一個(gè) 對(duì)話框
在android開發(fā)中 有的程序會(huì)使用webView調(diào)用外部的html 界面,有界面 就當(dāng)然有交互。 嘻嘻?
注意點(diǎn):
?AndroidManifest.xml中必須注冊"android.permission.INTERNET"進(jìn)行權(quán)限許可,(如果只是使用本地HTML,可以不用注冊許可權(quán)限)否則會(huì)出Web page not available錯(cuò)誤
webView的使用方式這里就不做介紹了. ?但需要注意的一點(diǎn)是 ,要使用js 必須開啟webView的js 支持, 否則webView是不支持js的喔
開啟WebView 的js方法
WebView webview=(WebView)findViewById(R.id.webview);//加上這句話才能使用javascript方法 ?? webview.getSettings().setJavaScriptEnabled(true);首先我們 先看看 如何在在java中調(diào)用 html中的js 方法?
1: ?首先創(chuàng)建一個(gè)測試的html?
代碼如下?
<html><head><script type="text/javascript">function updateHtml(){document.getElementById("content").innerHTML = "你通過 android 中的控件調(diào)用了html 中js 的方法";}</script></head><body>this is my html <a onClick="window.login.startFunction()" href="";>調(diào)用java中個(gè)的方法</a><span id="content"></span></body> </html>把上面代碼保存為 demo.html 放到android 項(xiàng)目下面assets目錄下面
上面的代碼中,包含了一個(gè)js 方法 ,我們接下來看看 如何在 activity中調(diào)用這個(gè)js 方法。 直接看代碼 :
布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"?><WebView?android:layout_weight="9"?android:id="@+id/webview" ?android:layout_width="fill_parent" ??android:layout_height="fill_parent" />?<Buttonandroid:layout_weight="1"android:id="@+id/button"android:layout_width="fill_parent"?android:layout_height="wrap_content"?android:text="調(diào)用html中的js 方法" />?<Buttonandroid:layout_weight="1"android:id="@+id/button1"android:layout_width="fill_parent"?android:layout_height="wrap_content"?android:text="重新加載html" />?</LinearLayout>程序代碼
public class MainActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//獲取webView 控件final WebView webview=(WebView)findViewById(R.id.webview);//加上這句話才能使用javascript方法 ?webview.getSettings().setJavaScriptEnabled(true);//加載公網(wǎng)中的 html界面//webview.loadUrl("http://128.128.191.62/cn/mobile/geturl.html");//加載sdcard中的 html界面webview.loadUrl("file:///sdcard/demo.html");?//加載assets目錄下面的demo.html 界面webview.loadUrl("file:///android_asset/demo.html");Button button=(Button)findViewById(R.id.button); //獲取button控件 即"調(diào)用html中的js方法" 按鈕//給button添加事件響應(yīng),執(zhí)行JavaScript的fillContent()方法 ?button.setOnClickListener(new Button.OnClickListener() { ?public void onClick(View v) {webview.loadUrl("javascript:updateHtml()"); ?}}); ?Button button1=(Button)findViewById(R.id.button1);//獲取button1控件 即"重新加載html "按鈕//給button添加事件響應(yīng),執(zhí)行JavaScript的fillContent()方法 ?button1.setOnClickListener(new Button.OnClickListener() { ?public void onClick(View v) {Log.d("MainActivity","button1 OnClick");webview.loadUrl("http://www.163.com");?}});} }上面代碼中 藍(lán)色部分代碼就是調(diào)用的 html中的js 方法 , 點(diǎn)擊?調(diào)用html中的js方法 ?按鈕會(huì)更新html內(nèi)容。?
那反過來 又如何 在 html中調(diào)用java 里面的方法 呢 , 同樣好簡單的 , 我們看看下面的 代碼:
public class MainActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//獲取webView 控件final WebView webview=(WebView)findViewById(R.id.webview);//加上這句話才能使用javascript方法 ?webview.getSettings().setJavaScriptEnabled(true);//webview.loadUrl("http://128.128.191.62/cn/mobile/geturl.html");//加載assets目錄下面的demo.html 界面webview.loadUrl("file:///android_asset/demo.html");Button button=(Button)findViewById(R.id.button); //獲取button控件 即"調(diào)用html中的js方法" 按鈕//給button添加事件響應(yīng),執(zhí)行JavaScript的fillContent()方法 ?button.setOnClickListener(new Button.OnClickListener() { ?public void onClick(View v) {Log.d("MainActivity","button OnClick");webview.loadUrl("javascript:showDialog()"); ?}}); ?Button button1=(Button)findViewById(R.id.button1);//獲取button1控件 即"重新加載html "按鈕//給button添加事件響應(yīng),執(zhí)行JavaScript的fillContent()方法 ?button1.setOnClickListener(new Button.OnClickListener() { ?public void onClick(View v) {Log.d("MainActivity","button1 OnClick");webview.loadUrl("http://128.128.191.62/cn/mobile/geturl.html");?//return?}});//增加接口方法,讓html頁面調(diào)用 ? 第二個(gè)參數(shù)為別名,在html 中調(diào)用會(huì)使用webview.addJavascriptInterface(this,"login"); ?}public void startFunction(){AlertDialog.Builder ab=new AlertDialog.Builder(MainActivity.this);ab.setTitle("提示");ab.setMessage("通過js 調(diào)用了 java 中的方法");ab.setPositiveButton("確定", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});ab.create().show();}}上面藍(lán)色代碼部分 ?定義了java一個(gè)方法 并且在主線程中將本身的java 實(shí)例 添加到 webView 中去,這樣就可以在 在 html中 使用 window.login.startFunction()就可以在html 中調(diào)用java 中間的方法 。 ?
?趕快去試試吧 ,?代碼 下載地址
?
轉(zhuǎn)載于:https://my.oschina.net/JiangTun/blog/654700
總結(jié)
以上是生活随笔為你收集整理的Android WebView 与 JS 交互的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Red Hat Linux 挂载外部资源
- 下一篇: 线程同步工具(七)在并发任务间交换数据