android webView js方法和java 方法交互

目標:  在android activity webView的使用,activity中執行html中的js 方法, 和在html 中 調用activity 中的java方法 

如圖 : 

 

 

 

上圖中 點擊了 ” 調用html中的js 方法“  後的 效果

上圖中 點擊了  html 中的 ”調用java中的方法“  後的 效果 這裏是調用java 中的方法 彈出了一個 對話框

在android開發中 有的程序會使用webView調用外部的html 界面,有界面 就當然有交互。 嘻嘻 

注意點:

 AndroidManifest.xml中必須註冊"android.permission.INTERNET"進行權限許可,(如果只是使用本地HTML,可以不用註冊許可權限)否則會出Web page not available錯誤

webView的使用方式這裏就不做介紹了.  但需要注意的一點是 ,要使用js 必須開啓webView的js 支持, 否則webView是不支持js的喔

開啓WebView 的js方法

 

        WebView webview=(WebView)findViewById(R.id.webview);

        //加上這句話才能使用javascript方法   

        webview.getSettings().setJavaScriptEnabled(true);

 

首先我們 先看看 如何在在java中調用 html中的js 方法 

1:  首先創建一個測試的html 

代碼如下 

 

<html>

<head>

<script type="text/javascript">

function updateHtml(){

document.getElementById("content").innerHTML =   

         "你通過 android 中的控件調用了html 中js 的方法";

}

 

</script>

</head>

<body>

this is my html <a onClick="window.login.startFunction()" href="";>調用java中個的方法</a>

<span id="content"></span>

</body>

</html>

 

把上面代碼保存爲 demo.html 放到android 項目下面assets目錄下面

上面的代碼中,包含了一個js 方法 ,我們接下來看看 如何在 activity中調用這個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"   

    /> 

   

 <Button

    android:layout_weight="1"

    android:id="@+id/button"

    android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    android:text="調用html中的js 方法"

    /> 

  <Button

    android: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. */

    @Override

    public 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);

        //加載公網中的 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控件 即"調用html中的js方法" 按鈕

       //給button添加事件響應,執行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添加事件響應,執行JavaScript的fillContent()方法  

        button1.setOnClickListener(new Button.OnClickListener() {  

              public void onClick(View v) {

              Log.d("MainActivity","button1 OnClick");

              webview.loadUrl("http://www.163.com"); 

              }

          });

    }

}

 

 

 

上面代碼中 藍色部分代碼就是調用的 html中的js 方法 , 點擊 調用html中的js方法  按鈕會更新html內容 

 

那反過來 又如何 在 html中調用java 裏面的方法 呢 , 同樣好簡單的 , 我們看看下面的 代碼

 

 

public class MainActivity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public 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控件 即"調用html中的js方法" 按鈕

       //給button添加事件響應,執行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添加事件響應,執行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頁面調用   第二個參數爲別名,在html 中調用會使用

        webview.addJavascriptInterface(this,"login");  

    }

    

    public void startFunction(){

    AlertDialog.Builder ab=new AlertDialog.Builder(MainActivity.this);

ab.setTitle("提示");

ab.setMessage("通過js 調用了 java 中的方法");

ab.setPositiveButton("確定", new DialogInterface.OnClickListener()

{

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

});

ab.create().show();

    }

}

 

上面藍色代碼部分  定義了java一個方法 並且在主線程中將本身的java 實例 添加到 webView 中去,這樣就可以在 在 html中 使用 window.login.startFunction()就可以在html 中調用java 中間的方法 。  

 趕快去試試吧 。

 https://blog.51cto.com/ext/down_att.php?aid=35928&code=0219 代碼 下載地址

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章