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

    }
}


发布了277 篇原创文章 · 获赞 84 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/qq_26296197/article/details/103996537