26

我将本地html文件(从资产文件夹)加载到应用程序WebView。 在HTML中,我运行了一个jQuery.getJSON(url)。该网址是一个远程服务器。WebView Javascript跨域从本地HTML文件

此操作失败,我猜测是由于不同的原始问题(跨域)。我在chrome上运行相同的文件,并在那里专门说明了这一点。

有没有办法允许Android中的WebView从本地加载的HTML文件中的远程服务器加载数据?

+1

您是否尝试添加“&jsoncallback =?”或“callback =?”到您的网址? – Zakaria 2011-12-27 19:54:37

+0

您是否尝试使用“.ajax”方法而不是“getJSON”?与“.ajax”,如果你把选项“数据类型:jsonp”,它应该为你工作! – Zakaria 2011-12-27 19:56:38

+0

远程服务器是否需要专门支持JSONP才能正常工作?我对网页浏览规则不是很熟悉,他们与桌面浏览器有什么不同吗? – mattacular 2011-12-27 20:02:03

回答

0

我加载(从资产文件夹)的本地HTML文件的应用程序的WebView

需要注意的是你没有说你是如何做。我猜测这是file:///android_asset URL上的loadUrl()

有没有办法允许Android中的WebView从本地加载的HTML文件上的远程服务器加载数据?

尝试使用loadDataWithBaseURL()加载内容,在远程服务器上提供一个URL作为基准URL。

0

Ajax调用不会从本地文件系统工作。更多的将会成为跨域。所以它不会工作。它在eclipse中工作,becuz你尝试从本地服务器。

2

不要忘记添加Internet权限在manifest文件:

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

还要确保您使用JSONP请求(?不要忘了&回调=如上所述)

50

今天早上我发现了似乎正在工作的解决方案。

Java的部分

初始化您的WebView:

WebView _webView = (WebView) this.findViewById(R.id.id_of_your_webview_in_layout); 

得到的WebView设置:

WebSettings settings = _webView.getSettings(); 

集以下设置:

settings.setJavaScriptEnabled(true); 
settings.setAllowFileAccessFromFileURLs(true); //Maybe you don't need this rule 
settings.setAllowUniversalAccessFromFileURLs(true); 

现在你可以通过标准的方式加载HTML文件:

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

JavaScript部分

创建通过标准的方式

var xhr = new XMLHttpRequest(); 
xhr.open("get", "http://google.com", false); 
xhr.send(); 

XHR请求在某处打印结果

document.body.innerHTML = xhr.responseText 

注意: 此过程仅适用于API级别16或更高(至少文档说)。

+2

根据setAllowFileAccessFromFileURLs和setAllowUniversalAccessFromFileURLs的文档,对于ICS和更旧版本,它们过去被设置为true。从果冻豆开始,他们将其关闭。如果您尝试从本地HTML页面加载本地JS文件,那么您需要启用这些文件。 – Steven 2013-04-03 22:34:37

+0

获取以下内容:NETWORK_ERR:XMLHTTPRequest异常101 – Codebeat 2014-03-12 13:09:55

+1

完美,工作正常:) – 2014-05-11 05:36:34

0

我们使用的解决方案是使用Android从服务器获取更新文件,将它们放置并覆盖文件到Web文件夹中,然后浏览。