Android 4.1 的访问控制允许来源错误

Posted

技术标签:

【中文标题】Android 4.1 的访问控制允许来源错误【英文标题】:Access-Control-Allow-Origin Error At Android 4.1 【发布时间】:2012-07-04 08:16:33 【问题描述】:

我在 android 4.1 上遇到 Access-Control-Allow-Origin 问题

在我的应用程序中,我有一些本地 html 文件和 javascript,用于从 Web 服务获取数据。在尝试 Android 4.1 之前没有问题,但在尝试 Android 4.1 之后出现此错误。

我阅读了很多文档,但找不到解决此问题的方法。

【问题讨论】:

【参考方案1】:

你需要做类似的事情

if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) 
  wv.getSettings().setAllowUniversalAccessFromFileURLs(true);

【讨论】:

谢谢,我会试试的。但是 Google API 模拟器没有这个问题;很有趣。 我不想听起来很愚蠢,但是我应该在我的项目中添加这个文件吗? @user1053263 :将它放在您创建 WebView 的任何位置,例如 onCreateViewonCreate。你可能还会做wv.getSettings().setJavaScriptEnabled(true)等。 如果我有api11下的项目怎么办?【参考方案2】:

@我是开发人员和其他面临同样问题的人。

Slushis 解决方案工作正常。但是如果你想编译并支持 API11 以下的系统,你必须添加以下内容:

if (Build.VERSION.SDK_INT >= 16)   
    Class<?> clazz = webView.getSettings().getClass();
    Method method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class);
    if (method != null) 
        method.invoke(webView.getSettings(), true);
    

这将在运行时加载并调用该方法,因此您可以使用例如编译安卓 2.3.3。

【讨论】:

不错的解决方案。是否有任何选项可以在低于 SDK 版本 16 时禁用此属性?【参考方案3】:

您的网络服务是否来自同一个域?我曾经在对不同域下的服务进行 ajax 调用时遇到此错误。 如果您可以控制 Web 服务,则可以设置 访问控制允许来源:* 在标题中,(尽管这种方式不是一种安全的方式。)

【讨论】:

其实它们在同一个域中,但在不同的子域中。但我不明白为什么我只收到这个错误 Android 4.1 而不是旧版本?发生了什么变化? 也不允许使用不同的子域。 Chrome 的表现真的很奇怪(我的“get”请求工作正常,但正在将我的“post”请求更改为“OPTIONS”请求),我花了很多时间来找出错误。当我将服务和客户端代码放在同一个子域下时,错误消失了。 这对我来说是不可能的;因为客户端是移动设备 :) 感谢您的帮助。 问题是,如果您从domainname.com/subdomainname 提供服务,您的客户端使用的 url 应该是相同的子域名。这是网址而不是移动设备。 对不起,我听不懂。我的服务安装在 sub.domain.com 上,我正在尝试从移动设备连接它;但由于来源为空并且 Access-Control-Allow-Origin 不允许,我得到了错误。

以上是关于Android 4.1 的访问控制允许来源错误的主要内容,如果未能解决你的问题,请参考以下文章

捕获“访问控制允许来源不允许来源”错误

访问控制允许来源错误

访问控制允许来源错误

Chrome 中的访问控制允许来源错误

Django Angular cors错误:不允许访问控制允许来源

重复的访问控制允许来源:* 导致 COR 错误?