这次在做一个原生态+H5的混合型的 APP 项目,由于长时间没有做过 Android 的 APP 了,有些东西都遗忘了,曾着这次做这个项目的机会再重新的温故一下。
一、在布局文件中建立 WebView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</WebView>
</LinearLayout>
二、在 Activity (或 Fragment)中初始及后续的操作
1、WebViewSettings: WebView相关配置的设置
private void setWebViewSettings() {
//获取一个webviewsetting对象
WebSettings setting = webview.getSettings();
//支持JavaScript
setting.setJavaScriptEnabled(true);
//显示缩放控制工具
setting.setDisplayZoomControls(true);
//设置webview支持缩放
setting.setSupportZoom(true);
setting.setBuiltInZoomControls(true);
//设置加载进来的页面自适应手机屏幕
setting.setUseWideViewPort(true);
setting.setLoadWithOverviewMode(true);
}
2、WebViewClient:辅助WebView处理各种通知与请求事件!
private void setWebClient() {
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
});
}
3、将以上的代码融合起来
setWebViewSettings();
setWebClient();
//要加载的页面
webview.loadUrl("http://www.XXX.com");
如果加载的本项目中的H5页面,则 loadUrl 写成这样的代码:
webView.loadUrl("file:///android_asset/中间可自定义路径/index.html");
这里会引发一个问题:在 android studio 中没有找到 assets 目录,直接使用上述代码会无法找到这个文件。
解决方法是:
你要自己创建,创建方式为:依次展开工程下的 app 文件夹 -> src 文件夹,然后选中 main 文件夹,右键选择 New -> Folder -> Assets Folder,这样可就新建了 assets 文件夹了
这样就实现了加载网页的功能,注意页面会全部加载后才会显示出来。
2020.05.06 记载
今天遇到了一个特殊的问题,这个问题之前也没有遇到过,问题是这样:本地的 H5 在用 AJAX 访问线上服务器的资源时遇到了跨域权限的问题。直接抛出了以下的错误。
CONSOLE(0)] "Failed to load http://XXXXXX: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.", source: file:///android_asset/index.html (0)
起初是以为服务器端没有将权限打开,但检查后发现并不是这个的原因。于是在网上找了一下解决的方法是在 webView 的设置加入以下的设置代码:
import android.os.Build;
……
// API >= 16
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
}
这个方法的含义是:是否允许file:// 协议下的js跨域加载http或者https的地址。
启用之后就无论是访问http的还是content的,还是file的,都没问题了,当然前提是html文件是放在本地的,
转载请注明:隨習筆記 » WebView加载(本地)网页