WebView与js交互用法与注意

xiaoxiao2021-02-27  133

前段时间做的项目涉及到WebView与js交互,当是有些困惑,不过还是解决了:

一、WebView 基本用法

      1.首先不要忘记在清单文件下添加网络权限:

       <uses-permission android:name="android.permission.INTERNET" />

2.在布局中添加WebView

只需使用标签<WebView></WebView>标签即可,如下:

<WebView android:id="@+id/mWebView" android:layout_width="match_parent" android:layout_height="400dp" /> 3.在代码中使用 WebView mWebView = (WebView) findViewById(R.id.mWebView); mWebView.loadUrl("http://www.baidu.com"); 二、WebView与js交互  1.我们需要使用一个类 WebSettings 在代码中构建:WebSettings settings = mWebView.getSettings();   2.与js交互就要设置 支持相关属性,以下是一些常用的设置: settings.setJavaScriptEnabled(true);//设置支持js settings.setJavaScriptCanOpenWindowsAutomatically(true);//设置js能直接打开窗口 settings.setDefaultTextEncodingName("utf-8");//设置编码格式 settings.setBuiltInZoomControls(true);//设置支持缩放 settings.setUseWideViewPort(true);//适配屏幕,可以任意比例缩放 settings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题 settings.setAppCacheEnabled(true);//设置使用缓存 3.与js进行交互要定义一个类似于协议的东西:例如我们定义为:forAndroid  3.1我们需要写一个用于提供js调用Android方法的类,暂命名:JavaScriptObject   public class JavaScriptObject { //写了一个方法让js调用 //在高版本中要添加引用js @JavascriptInterface

public void FromAndroid(String string) { //处理相关逻辑代码... } } //设置本地调用对象及其接口,填写定义的协议:forAndroid mWebView.addJavascriptInterface(new JavaScriptObject(MainActivity.this),"forAndroid"); //载入网页 mWebView.loadUrl(UrlPath.main_web); 3.2 js已经调用了Android的方法,下面是Android 调用js 例如Html页面中的js方法为:positionPoint(string) 参数为一个字符串,传参的时候需要注意添加引号,调用如下: mWebView.loadUrl("javascript:positionPoint('"+ "我是一个字符串"+"')"); 前方高能---》开发过程中存在Android 调用不到js的问题,原因是js在运行之前需要有一个documen的对象,所以我们在加载的时候需要load一 个空白页。如果loda空白页的时候没有执行完Html,里面的方法就不走。所以如果想在原生中调用js的方法,让js的document对象 生成有一下几种方法: 1.使用按钮点击调用js 2.使用延时调用 3.在页面加载完调用 按照需求和实际开发情况选取:个人一般会使用第三种方式: mWebView.setWebViewClient(new MyWewViewClient()); //创建一个类继承 WebViewClient,重写onPageFinished()方法 class MyWewViewClient extends WebViewClient{ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); main_webview.loadUrl("javascript:positionPoint('"+ "我是一个字符串"+"')"); } } 这样的话在Html加载完成后调用js就行了 三、其他用法: 1有时候WebView加载Html时,需要跳转网页,默认是使用手机浏览器打开,我们需要跳转依然在当前WebView mWebView .setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); 2.按下返回键是,不是退出程序,而是返回上一级页面 public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } 3.最后再添加一个网页加载过程 mWebView.setWebChromeClient(new WebChromeClient(){ public void onProgressChange(WebView view,int newProgress){ super.onProgressChanged(view,newProgress); if(newProgress==100){ Log.i("tag","网页加载完成了"); }else{ Log.i("tag","网页加载中..."); } } }); 好了,关于WebView的知识就介绍到这了。

转载请注明原文地址: https://www.6miu.com/read-16882.html

最新回复(0)