WebView的简单用法

翻译 2016年06月01日 13:05:49

简单的加载一张网页

     mWebView = new WebView(this);
        setContentView(mWebView);
        //添加这句话,否则会调用第三方浏览器打开
        mWebView.setWebViewClient(new WebViewClient());
        mWebView.loadUrl("http://www.baidu.com");
<manifest >
    <uses-permission android:name="android.permission.INTERNET" />

</manifest>

在WebView中启用JavaScript交互

1.启用JavaScript

WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

2.定义类,用于JavaScript交互
public class WebAppInterface {
Context mContext;

/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
    mContext = c;
}

/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
    Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}

}
注意:@JavascriptInterface 这个必须添加
3.向WebView添加用于交互的对象&&给网页中JavaScript脚本需要的对象名称“Android”

webView.addJavascriptInterface(new WebAppInterface(this), "Android");

4.在assets文件中定义一个hello.html网页,内容如下:

<html>
<body>
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>
</body>
</html>

5.JavaScript&&Android交互的完整java代码如下:
注意assets文件夹的位置
这里写图片描述

public class MainActivity extends Activity {
    WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mWebView = new WebView(this);
        setContentView(mWebView);
        //添加这句话,否则会调用第三方浏览器打开
        mWebView.setWebViewClient(new WebViewClient());
        WebSettings webSettings=mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        mWebView.addJavascriptInterface(new WebAppInterface(this),"Android");
        mWebView.loadUrl("file:///android_asset/hello.html");
    }

    public class WebAppInterface {
        Context mContext;

        /** Instantiate the interface and set the context */
        WebAppInterface(Context c) {
            mContext = c;
        }

        /** Show a toast from the web page */
        @JavascriptInterface
        public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }
    }


}

处理WebView中链接的打开方式问题

启用JavaScript带来便捷的同时引入了安全问题,如果可以确保跳转的链接是安全的可以使用WebView,如果不能保证则使用默认浏览器进行处理。

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().equals("www.example.com")) {
            // This is my web site, so do not override; let my WebView load the page
            return false;
        }
        // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }
}

修改

        mWebView.setWebViewClient(new WebViewClient());
为
        mWebView.setWebViewClient(new MyWebViewClient ());

WebView浏览历史的回退

这个没有什么好解释的,就是可以查看浏览历史进行前进&&回退,放一个Demo,大家理解一下吧。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="goBack" />

        <Button
            android:id="@+id/btn_forward"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="goForward" />

    </LinearLayout>


    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/ll"></WebView>

</RelativeLayout>

public class MainActivity extends Activity implements View.OnClickListener {
    WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.webView);
        findViewById(R.id.btn_back).setOnClickListener(this);
        findViewById(R.id.btn_forward).setOnClickListener(this);

        //添加这句话,否则会调用第三方浏览器打开
        mWebView.setWebViewClient(new WebViewClient());
        mWebView.loadUrl("http://www.baidu.com");
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_back: {
                if (mWebView.canGoBack()) {
                    mWebView.goBack();
                }
                break;
            }
            case R.id.btn_forward: {
                if (mWebView.canGoForward()) {
                    mWebView.goForward();
                }
                break;
            }
            default:
                break;

        }
    }

}

做WebView调试的时候踩了一个坑,url必须添加http://,即使是IP

翻译地址

https://developer.android.com/guide/webapps/webview.html

NetWork获取连接状态/WebView的简单用法/当按返回键时返回堆栈内容

NetWork获取连接状态1.首先通过连接管理器获取系统的连接服务2.然后获取当前活动的网络连接信息3.判断网络连接是否为空以及得到网络连接的类型 private ConnectivityManage...

iOS webView的高级用法之JS交互,js与oc的相互调用(JavaScriptCore)

前言:说起JS交互,很多童鞋会黯然色变,感觉很高深的样子。大部分小伙伴只知道一种,哪一种我也说说吧。    1.在webView中将要请求的时候,拦截URL,进行重定向,然而该场景实用有限,网上资料也...
  • horisea
  • horisea
  • 2016年08月12日 15:24
  • 5511

webview的简单运用

  • 2017年03月22日 23:06
  • 24.43MB
  • 下载

WebView的用法详解

1、布局 2、WebView加载网页

WebView简单浏览器

  • 2016年04月04日 21:52
  • 8.48MB
  • 下载

WebView简单使用Demo

  • 2017年06月18日 21:39
  • 20.45MB
  • 下载

android中WebView的用法总结

android中webView的使用 1. 简单使用:使用的是系统默认的浏览器打开 webView = (WebView) findViewById(R.id.webView); ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WebView的简单用法
举报原因:
原因补充:

(最多只允许输入30个字)