webview跨域设置
本文由 小茗同学 发表于 2016-06-28 浏览(14985)
最后修改 2016-06-28 标签:android webview 跨域 cross domain

先看个例子

先看如下代码:

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文件是放在本地的,