先看个例子
先看如下代码:
function getFileBlobFromURI(fileURI, success, error)
{
var xhr = new XMLHttpRequest();
xhr.open('GET', fileURI, true);
xhr.responseType = 'blob';
xhr.addEventListener('error', error || function(){console.log(arguments)}, false);
xhr.addEventListener('load', function(e)
{
if (this.status == 200 || this.status == 0 )
{
if(success) success(this.response);
}
else if(error) error();
});
xhr.send();
}
getFileBlobFromURI('http://www.baidu.com/xxx.jpg'); //一张普通的图片
普通浏览器执行肯定提示:
XMLHttpRequest cannot load https://xxx.jpgg. Origin null is not allowed by Access-Control-Allow-Origin.
Android WebView默认情况下执行也是如此,如果访问content:// 协议的内容:
XMLHttpRequest cannot load content://xxx. Cross origin requests are only supported for HTTP.
跨域设置
// API >= 16
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN)
{
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
}
这个方法的含义是:是否允许file:// 协议下的js跨域加载http或者https的地址。
启用之后就无论是访问http的还是content的,还是file的,都没问题了,当然前提是html文件是放在本地的,