andr与js交互

在xml里写webView控件

 <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#000" />

在第一个mainActivity中

//-----------------   --------------------------oncreatview方法中------------------------------------------------------
//adnroid调用js方法
        WebSettings webSettings = webView.getSettings();
        //设置支持js
        webSettings .setJavaScriptEnabled(true);
        // webView.loadUrl("file:///android_asset/info.html");
        webView.loadUrl("file:///android_asset/info.html");

        //  webView.loadUrl("https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=selenium+jar+2.4");

        //交互  adnroid调用js方法  //长按事件
        webView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                //adnroid调用js方法
                webView.loadUrl("javascript:test1()");//可以传参数
                // webView.evaluateJavascript();//Android 4.4

                //   webView.loadUrl("javascript:(document.getElementsByTagName('img')[0].src='http://p4.so.qhmsg.com/bdr/326__/t0168082f62f4b041de.jpg'; )");
                return false;
            }
        });


        //1,js调用安卓   协议
        webView.addJavascriptInterface(this, "android");

//------------------------------------------------oncreatview方法外-------------------------------------------------------------
//js调用安卓方法需要添加注解
    @JavascriptInterface
    public void jump() {//传参

        Toast.makeText(getActivity(), "js调用adnroid方法", Toast.LENGTH_SHORT).show();
        Intent intent =new Intent(getActivity(),Main2Activity.class);
        startActivity(intent);
    }
    //页面销毁的时候销毁webView
    @Override
    public void onDestroy() {
        super.onDestroy();
        webView.destroy();
    }

在第二个MainAcyivity中 布局里面控件都是和第一个布局一样

package com.example.zhousan;

import android.annotation.SuppressLint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.webkit.GeolocationPermissions;
import android.webkit.JavascriptInterface;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class Main2Activity extends AppCompatActivity {

    @SuppressLint("JavascriptInterface")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        final WebView webview = (WebView) findViewById(R.id.webview);
        //设置webview支持js交互
        webview.getSettings().setJavaScriptEnabled(true);
        //加载页面
        webview.loadUrl("file:///android_asset/infos.html");

        //设置弹出Alert
        webview.setWebChromeClient(new WebChromeClient(){
            //title就是网页标题
            @Override
            public void onReceivedTitle(WebView view, String title) {//此方法可获得网页标题
                Log.i("xxx",view.getTitle());
                super.onReceivedTitle(view, title);

            }

            @Override
            public boolean onJsAlert(WebView view, String url, String message,
                                     JsResult result) {
                // TODO Auto-generated method stub
                //false弹出  true和super不弹
                return false;
            }

            @Override
            public boolean onJsPrompt(WebView view, String url, String message,
                                      String defaultValue, JsPromptResult result) {
                // TODO Auto-generated method stub
                return super.onJsPrompt(view, url, message, defaultValue, result);
            }
            /**处理定位的相关,否则WebView不会开启定位功能,类似百度地图这样的就没法定位*/
            @Override
            public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                callback.invoke(origin, true, false);              //这个必须有
                super.onGeolocationPermissionsShowPrompt(origin, callback);
            }
        });

        webview.setWebViewClient(new WebViewClient(){
            //拦截浏览器加载页面,让WebView加载页面
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                view.loadUrl("url");
                return true;
            }
        });

        //js调用andorid方法
        webview.addJavascriptInterface(this, "android");
    }

    //js调用andorid方法 并传值
    @JavascriptInterface
    public void showUserInfo(String name,String pwd){
        Toast.makeText(this, name+","+pwd, Toast.LENGTH_LONG).show();


        /*Intent intent =new Intent(this,Main3Activity.class);
        startActivity(intent);*/
    }
}

第三个MainActivity中

package com.example.zhousan;

import android.annotation.SuppressLint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class Main3Activity extends AppCompatActivity {

    @SuppressLint("JavascriptInterface")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        //找控件
        final WebView webview =(WebView) findViewById(R.id.webview);
        //得到WebSettings
        WebSettings webSettings = webview.getSettings();
        //加载页面之前设置支持js交互
        webSettings.setJavaScriptEnabled(true);
        //第一种加载本地html页面
        webview.loadUrl("file:///android_asset/newsinfo.html");
        //第二种加载网页 有网  加联网权限
        //	webview.loadUrl("https://www.baidu.com");
        //	webview.loadUrl("http://172.16.10.119:8080/bwie/mhIndex.do?m=index");
        //第三种加载html字符串
		/*String html = "<html><head><title>TextView使用HTML</title></head><body><p><strong>强调</strong></p><p><em>斜体</em></p>"
                + "<p><a href=\"http://www.dreamdu.com/xhtml/\">超链接HTML入门</a>学习HTML!</p><p><font color=\"#aabb00\">颜色1"
                + "</p><p><font color=\"#00bbaa\">颜色2</p><h1>标题1</h1><h3>标题2</h3><h6>标题3</h6><p>大于>小于<</p><p>" +
                "下面是网络图片</p><img src=\"http://avatar.csdn.net/0/3/8/2_zhang957411207.jpg\"/></body></html>";
		webview.loadData(html, "text/html", "gbk");*/
        /**
         * android调js方法
         *
         */
        webview.setOnLongClickListener(new View.OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                // TODO Auto-generated method stub
                webview.loadUrl("javascript:test1()");

                return false;
            }
        });
        /**
         * js调android方法
         * 第一步设置支持js调用android方法
         *
         */
        webview.addJavascriptInterface(this, "android");


        webview.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
                //不使用系统浏览器 使用WebView内置浏览器
                view.loadUrl(url);
                return true;
            }
        });

        webview.setWebChromeClient(new WebChromeClient(){
            //获取网页加载进度
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                // TODO Auto-generated method stub
                super.onProgressChanged(view, newProgress);


            }

        });
    }

    //定义一个android方法
    @JavascriptInterface
    public void toastMessage(){
        Toast.makeText(this, "js调用android方法了", Toast.LENGTH_LONG).show();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43936560/article/details/88073126