WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:
第一种方法的步骤:
1.在要Activity中实例化WebView组件:WebView webView = new WebView(this)
2.调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl("http://www.google.com")
本地文件用:webView.loadUrl("file:///android_asset/XX.html")本地文件存放在:assets 文件中
3.调用Activity的setContentView( )方法来显示网页视图
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />
第二种方法的步骤:
1、在布局文件中声明WebView
2、在Activity中实例化WebView
3、调用WebView的loadUrl( )方法,设置WevView要显示的网页
4、为了让WebView能够响应超链接功能,调用setWebViewClient( )方法,设置 WebView视图
5、用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
6、需要在AndroidManifest.xml文件中添加权限,否则出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET"/>
在使用webView.loadData(data, "text/html", "utf-8"),出现找不到网页的问题, 检查之后发现data数据是正确的,也有上网的权限,可是就是找不到网页, 后经过查找,找到了解决方法:把 webView.loadData 改为 webView.loadDataWithBaseURL 方法就可以了, 可以这样使用:webView.loadDataWithBaseURL(null,data, "text/html", "utf-8", null) 原因如下: loadData()中的html data中不能包含'#', '%', '\', '?'四中特殊字符,出现这种字符就会出现解析错误, 显示找不到网页还有部分html代码。因为css中经常用'#', '%'等字符,所以大部分网页会出现解析错误,需要如何处理呢?我们需要用UrlEncoder编码为%23, %25, %27, %3f 。webView.loadData(URLEncoder.encode(data, "utf-8"), "text/html", "utf-8")这样写之后会发现错误没有了,但是显示效果不好,一些背景颜色排版效果都没有了。 public void loadDataWithBaseURL ([url=]String[/url] baseUrl, [url=]String[/url] data, [url=]String[/url] mimeType, [url=]String[/url] encoding, [url=]String[/url] historyUrl)推荐使用loadDataWithBaseURL(),只是多了两个参数,我们可以这样使用 webView.loadDataWithBaseURL(null,data, "text/html", "utf-8", null)这样html代码就会完美解析了。 注意,访问网络要在配置文件中加上权限webView.getSettings().setJavaScriptEnabled(true) 让WebView 支持JavaScript。本文虽然写的是解决Android写localstorage的问题,但是对于iOS同样适用。
在android中,native经常需要和h5页面进行交互,比如将本地token写入h5,然后h5中的js获取token进行api请求。
写入localstorage的方法很标准,即在webview的onPageFinished中注入并调用一段js即可。
但是这样做有个问题,就是token注入是在页面加载完毕之后进行,而页面加载完毕,页面中的js也就基本执行完毕了,所以页面中原有的js执行获取token是获取不到的。
一种解决方法就是在h5内判断token是否为空,如果是则重新刷新页面。因为token为空是在首次加载页面时发生的,所以也只有在首次加载页面时会重新刷新,只有首次加载页面成功,写入localstorage,后面获取localstorage都不会失败了。
还有一种方法就是 在登录或者注册成功后 ,或者首次进入本地主页面时,隐式的创建一个webview并访问目标根url,将localstorage预先写入。注意,根目标url一定要以/结尾,比如 https://www.baidu.com/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)