js調用安卓的方法

關鍵點

1 .

   WebSettings settings = webview.getSettings();
  settings.setJavaScriptEnabled(true);// 這樣網頁就可加載JavaScript了

2

webview.addJavascriptInterface(new GetTitle2(), "getTitle"); // 向webview註冊一個Java對象

3寫js將要調用的方法 用 @JavascriptInterface備註

  @JavascriptInterface
        public void onGetTitle(String title) {
            Log.e("tag","title=="+title);
            tvTitle.setText(title);     //設置標題
        }
package com.example.myapplication;

import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity2 extends AppCompatActivity {

    private WebView webview;
    private TextView tvTitle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        webview = (WebView)findViewById(R.id.webView);
        tvTitle = (TextView)findViewById(R.id.tvTitle);

        WebSettings settings = webview.getSettings();
        settings.setJavaScriptEnabled(true);// 這樣網頁就可加載JavaScript了
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        settings.setBuiltInZoomControls(true);// 顯示放大縮小按鈕
        settings.setSupportZoom(true);// 允許放大縮小
        settings.setSupportMultipleWindows(true);

        webview.addJavascriptInterface(new GetTitle2(), "getTitle"); // 向webview註冊一個Java對象
        webview.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                //注入一段JavaScript,該代碼主要是調用Java對象的一個方法並將頁面標題作爲參數
                view.loadUrl("javascript:window.getTitle.onGetTitle("
                        + "document.getElementsByTagName('title')[0].innerHTML" + ");");
                super.onPageFinished(view, url);
            }
        });

        webview.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onReceivedTitle(WebView view, String title) {
                tvTitle.setText(title);
            }
        });

        webview.loadUrl("https://www.baidu.com/");
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK) {
            if(webview.canGoBack()) {
                webview.goBack();
            } else {
                finish();
            }
            return true;

        }
        return super.onKeyDown(keyCode, event);
    }

    //注入JavaScript的Java類
    class GetTitle2 {
        @JavascriptInterface
        public void onGetTitle(String title) {
            Log.e("tag","title=="+title);
            tvTitle.setText(title);     //設置標題
        }
    }

    @Override
    protected void onDestroy() {
        webview.destroy();
        super.onDestroy();

    }
}


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