Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android與JS互相調用以及注意

Android與JS互相調用以及注意

編輯:關於Android編程

最近項目中經常使用Html5而Android與JS調用經常會用到,這裡記錄一下,測試系統5.0以上。

這裡先貼一下源碼

Activity:

 

package jwzhangjie.com.webviewandjs;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView)findViewById(R.id.webView);
        initWebView();
    }

    private void initWebView(){
        //設置編碼
        webView.getSettings().setDefaultTextEncodingName(utf-8);
        //支持js
        webView.getSettings().setJavaScriptEnabled(true);
        //設置監聽事件
        webView.setWebViewClient(new JieWewViewClient());
        //設置本地調用對象及其接口
        webView.addJavascriptInterface(new JavaScriptObject(getApplicationContext()), toAndroid);
        //載入js
        webView.loadUrl(file:///android_asset/index.html);
    }

    public void javaCallJsNoParams(View view){
        webView.loadUrl(javascript:javaCallJsNoParamsMethod());
    }

    public void javaCallJsHasParams(View view){
        webView.loadUrl(javascript:javaCallJsHasParamsMethod(' + 123 + '));
    }

    public class JavaScriptObject {

        Context mContxt;

        public JavaScriptObject(Context mContxt) {
            this.mContxt = mContxt;
        }

        @JavascriptInterface //sdk17版本以上加上注解
        public void jsCallJavaNoParams() {
            Toast.makeText(mContxt, Js調用Java方法(無參), Toast.LENGTH_LONG).show();
        }

        @JavascriptInterface //sdk17版本以上加上注解
        public void jsCallJavaHasParams(String params) {
            Toast.makeText(mContxt, Js調用Java方法(有參): + params, Toast.LENGTH_SHORT).show();
        }
    }

    class JieWewViewClient extends WebViewClient{
        /**
         *  如果緊跟著
         *  webView.loadUrl(file:///android_asset/index.html);
         *  調用Js中的方法是不起作用的,必須頁面加載完成才可以
         */

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            webView.loadUrl(javascript:javaCallJsHasParamsMethod(' + 123 + '));
        }
    }

}

html:

 

 




  
界面:

 

/

注意點:

1、Android系統17以及以上,js調用java需要在方法上面加入@JavascriptInterface

2、不能在加載html頁面的下面直接調用js方法,應該在WebViewClient的onPageFinished裡面加載,原則就是必須html加載完畢後,才能調用js中的方法。

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved