Win8.1和WP8.1在UniversalAPP中WebView的研究
1. 正常载入一个页面的回调过程
1.1ContentLoading->DOMContentLoaded->NavigationCompleted->LoadCompleted
1.2从ContentLoading开始载入Body的资源。
1.3如果html里面有frame,则流程变为:
ContentLoading->FrameNavigationStarting->DOMContentLoaded->FrameContentLoading-> Frame NavigationCompleted->NavigationCompleted->LoadCompleted
2.Navigate方式有3种
2.1NavigateToLocalStreamUri(Uri,IUriToStreamResolver)
2.1.1该方法能够接管webview所需要访问的资源,但是http开头的资源,是接管不到的。只要实现IUriToStreamResolver可以用代码对资源进行控制。
2.1.2 支持Package和Local的文件获取
2.2.Navigate(Uri)
目前其使用的Uri支持appx-web,appdata协议,也可以直接是url。
2.2.1 appx-web协议
从程序包里面读资源文件,html文件中的资源的路径可以是绝对路径,也可以是相对路径,webview可以识别。
2.2.2 appdata协议
①从应用本地目录中获取,格式为”ms-appdata:///local/+目录”。
②该协议下如果用2.2的接口,则必须要将html需要的资源和html文件放在同一个文件夹下,html的资源路径不管是不是”/”开头,webview都认为是相对路径。
③如果html中要的本地文件,如果在对应目录中不存在,wp上会直接跳出应用,大概过1分钟左右崩溃,且捕获不到异常。Win上没有这现象。
④不支持js的window.exteranl.notify功能
2.3 NavigateToString()
2.4 NavigateWithHttpRequestMessage(HttpRequestMessage)
2.5 性能
主要对2.1和2.2做了性能测试,取一篇离线文章做跳转100次(即1.中的过程100次),
单位(ms)
Win8(我的mac)
Wp(630)
2.1方式
102931
68200
2.2方式
108729
49118
3. wp下按回退键直接跳出应用的解决方案
Page下的按键回调访问不到,需要在页面上添加
Windows.Phone.UI.Input.HardwareButtons.BackPressed事件的回调,从而进行回退的控制。