android 與html交互java調js與js調java操作


1.首先在項目下建一個assets目錄(右擊app->New->Folder->Assets Flolder),直接放在項目根目錄下和res目錄同級別(把所html,js,圖片,css等所有網頁相關放在這個目錄下)r

 

2.建一個test.html文件代碼如下

<html>

<script>
        function callJS(arg){
            document.getElementById('replaceme').innerHTML=arg;
            alert("arg="+arg);
        } //Android后台java會來調用它
    </script>
<body>
<a href="#"  onclick="window.alert('AlertfromJavaScript')">
        alert調用toast</a><br>
    
    <a href="#" onclick="window.android.callAndroid('HellofromBrowser')">
        js調用java方法</a><br>
    <a href="#" onclick="window.android.callAndroid222('HellofromBrowser2222','333')">
        js調用java方法2</a>
    <!--//js通過自己定義“android"接口來調用java類中的方法,"android"可以改成任意的,但必須和java中設置的接口名一致-->
    <br />
    <p id="replaceme">
    </p>
<body>
</html>

3.layout文件如下

<WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/webView"
        android:layout_below="@+id/btnUrlShow" />




<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="java調用js方法"
        android:id="@+id/bt4"
        android:layout_below="@+id/bt3"
        android:layout_alignLeft="@+id/bt3"
        android:layout_alignStart="@+id/bt3" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="用來顯示html調用的值"
        android:id="@+id/textView5"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>

4.activity代碼如下

 

public class WebViewActivity extends Activity  {
private Button sendRequest,bt4;
private TextView responseText,textView5;


private final Handler handler=new Handler();//只有用handel才能修改android控件的值
    private class AndroidBridge //這個類中提供各種js可調用的方法。
    {
        @JavascriptInterface
        public void callAndroid(final String arg)
        {
            handler.post(new Runnable(){
                public void run()
                {
                    Log.d("ZW", "calAndroid("+arg+")");
                    textView5.setText(arg);
                }
            });
        }

        @JavascriptInterface
        public void callAndroid222(final String arg,final  String arg2)
        {
            handler.post(new Runnable(){
                public void run()
                {
                    Log.d("zwzw", "callAndroid222("+arg+","+arg2+")");
                    textView5.setText(arg);
                }
            });
        }
    }



  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
    textView5=(TextView)findViewById(R.id.textView5);
    
     webView = (WebView) findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);//讓web可以運行js
    String url="file:///android_asset/test.html";
    webView.loadUrl(url);


   
        webView.addJavascriptInterface(new AndroidBridge(), "android"); //將那個實例化的函數類設置為”android"的js接口這個。這里什么android名字前台js調用就用什么,比如這這里給名字為abc,html中調用就用onclick="window.abc.callAndroid(...."

        //覆蓋重寫html中js的alert方法,還可以覆蓋重寫別的方法,可以轉到定義去查。。
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

                Log.d("ZW", "onJsAlert(" + view + "," + url + "," + message + "," + result + ")");
                Toast.makeText(WebViewActivity.this, message, Toast.LENGTH_SHORT).show();
                result.confirm();
                return true;
            }

        });//設置可以被java截獲的js事件。

        //點android控件調用js方法
     bt4=(Button)findViewById(R.id.bt4);
bt4.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.d("ZW", "onClick(" + v + ")"); webView.loadUrl("javascript:callJS('hello from android')"); //java調用js的函數 } }); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM