尝试从磁盘加载资源时,Android WebView会抛出“仅支持http的跨源请求”异常

时间:2014-08-22 04:34:22

标签: android webview

我在html / js中开发了一个单页游戏,并且我试图在android webview中托管它。我有一个文件夹src/main/assets/www/和这行代码来引导我的应用程序:

mWebView.loadUrl("file:///android_asset/www/index.html");

index.html加载app.js文件,这是我的游戏。当我尝试在xhr内发出app.js请求以获取assets/myimage.svg(实际位置src/main/assets/www/assets/myimage.svg)时:

var xhr = new XMLHttpRequest();
        xhr.open('get', 'assets/myimage.svg', true);
        xhr.send();

我收到此错误:cross origin requests are only supported for http。为什么这是一个跨源请求?我该怎么做才能解决这个问题?我无法在http网络服务器上托管svg而无法在app.js内嵌它 - 它必须从磁盘加载。

2 个答案:

答案 0 :(得分:44)

不确定,但您可以尝试这些步骤,看看是否有帮助:

a)初始化WebView:

b)获取WebView设置:

WebSettings settings = _webView.getSettings();

c)设置以下设置:

settings.setAllowFileAccessFromFileURLs(true);
settings.setAllowUniversalAccessFromFileURLs(true);

d)现在您可以通过标准方式加载您的html文件:

mWebView.loadUrl("file:///android_asset/www/index.html");

e)不要忘记在清单文件中添加互联网权限:

<uses-permission android:name="android.permission.INTERNET"/>

答案 1 :(得分:0)

如果您正在寻找与Android相同的问题,但使用Xamarin / C#

        var webView = FindViewById<WebView>(Resource.Id.webView);
        webView.Settings.JavaScriptEnabled = true;
        webView.Settings.AllowFileAccessFromFileURLs = true;
        webView.Settings.AllowUniversalAccessFromFileURLs = true;

        webView.LoadUrl("file:///android_asset/www/index.html");