Android开发WebView与js交互

1,配置方法

不需要引jar包,也不需要在gradle引入依赖,直接就可以调用

2,代码调用     

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {

    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }


    private void initView() {
        webView = (WebView) findViewById(R.id.huodongWebView);
        webView.loadUrl("后台接口返回数据的url");

        webView.clearCache(true);
        webView.clearHistory();
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.setWebViewClient(new JoeWebViewClient());
        webView.addJavascriptInterface(new Object() {

            /**
             * str1,str2都是网页回传回来的数据字段,安卓端所有的操作就在方法里面完成,这就
             * 实现了webview与Js是简单的数据交互操作
             */


            @JavascriptInterface
            public void test1(String str1,  String str2) {

            }

            @JavascriptInterface
            public void test2(){

            }
        }, "android");
    }


    private class JoeWebViewClient extends WebViewClient {

        // 在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边.
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }


        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
        }
    }

}

3,需要了解

在JS代码中访问Java中的函数,则用到WebView的addJavascriptInterface()函数。因为安全问题,在Android4.2中(如果应用的android:targetSdkVersion数值为17+)JS只能访问带有 @JavascriptInterface注解的Java函数。之前,任何Public的函数都可以在JS代码中访问,而Java对象继承关系会导致很多Public的函数都可以在JS中访问,其中一个重要的函数就是  getClass()。然后JS可以通过反射来访问其他一些内容。通过引入 @JavascriptInterface注解,则在JS中只能访问 @JavascriptInterface注解的函数。这样就可以增强安全性。如果应用android:targetSdkVersion数值为17或者大于17记得添加 @JavascriptInterface 注解。


发布了15 篇原创文章 · 获赞 3 · 访问量 2806

猜你喜欢

转载自blog.csdn.net/u010184528/article/details/71516219