loadUrl("file:///data/data/net.wszf.client.xxx/cache/wszf.xx");

在kitkat只会将原始内容显示出来,不会进行Html解释..

4.3环境下正常.

然后将wszf.xx后缀改为wszf.html即可正常解析.

android项目asset中的文件不受影响可用:后缀随便写.

跟踪了一下WebView的loadUrl实现

具体实现在Sources/frameworks/webview/chromium/java/com/android/webview/chromium/WebViewChromium.java文件中

loadUrl方法

中有一个LoadUrlParams params = new LoadUrlParams(url); 变量

最后是调用loadUrlOnUiThread(params);

然后loadUrlOnUiThread方法中进行判断是否POST后

调用 mAwContents.loadUrl(loadUrlParams);//至此所有操作进行转换到chromium中了

地址:Sources/external/chromium_org

mAwContents.loadUrl方法中进行一些判断后接着将LoadUrlParams向下

传递给mContentViewCore.loadUrl(params);//次方法将params取值传给native方法:nativeLoadUrl

在往下就进去底层了,跟不进去了啊.玩不转了.悲剧.

mAwContents.loadUrl中有个判断注释为:

if (params.getLoadUrlType() == LoadUrlParams.LOAD_TYPE_DATA &&
            !params.isBaseUrlDataScheme()) {
            // This allows data URLs with a non-data base URL access to file:///android_asset/ and
            // file:///android_res/ URLs. If AwSettings.getAllowFileAccess permits, it will also
            // allow access to file:// URLs (subject to OS level permission checks).
            params.setCanLoadLocalResources(true);
        }

本来打算通过对比来看下kitkat到底改动了哪里,结果以上这些都是kitkat新建的项目,囧了.


至于google为什么这么做?我的理解是安全机制?只准白名单文件进行解释执行?