问题描述
使用WebView来显示本地网页时,如果开发人员在网页里使用了XMLHttpRequest来额外加载本地文件,在部分手机上会呈现下列的错误讯息:
Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'file:///asset/content.txt'
问题原因
发生这个错误的原因,是因为Android基于安全性的考虑,从Android 4.1版开始禁止了WebView内的本地网页使用XMLHttpRequest来读取本地档案(4.1版之前无限制)。这也就造成了「Android 4.1之前的手机」可以正常使用XMLHttpRequest,而「Android 4.1之后的手机」无法正常使用XMLHttpRequest。
解决方案
使用WebView原生提供的「AllowFileAccessFromFileURLs」方法,来重新开启XMLHttpRequest读取档案功能,后续在WebView中执行的本地网页就可以正常使用XMLHttpRequest来读取本地档案内容。
// WebSettings
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
settings.setAllowFileAccessFromFileURLs(true);
}