在安卓Web视图中,出现“Origin null is not allowed by Access-Control-Allow-Origin.:1”的错误信息?

7
我遇到了这个错误:
XMLHttpRequest cannot load http://192.168.1.33:8080/ws/target. Origin null is not allowed by Access-Control-Allow-Origin.:1

当我尝试在Webview上加载HTML页面时,我输入以下脚本标签。
<script src="http://192.168.1.33:8080/target/target-script-min.js#anonymous"></script>

实际上,当我在weinre上调试我的代码时,出现了这个错误。请问如何解决这个问题?

有没有办法解决这个错误呢? 但是当我创建phonegap项目并加载相同的HTML和导入脚本行时,却不出现此错误。

<script src="http://192.168.1.33:8080/target/target-script-min.js#anonymous"></script>

通过这行代码

我可以在WinRE上调试我的文件。

请问您能告诉我如何在WebView加载时消除此错误吗?


你有检查过这个线程吗:https://dev59.com/IGgu5IYBdhLWcg3wdGsb? - mguimard
你需要在 Web 服务中启用 CORS,并允许客户端 IP(或 *)访问 Web 服务中的 Access-Control-Allow-Origin。 - Avishek
它是什么?它解决了我的问题吗? - user3703527
1个回答

13
问题是由于您的浏览器中的CORS策略引起的。为了消除错误,您通常需要在您使用的任何服务器上进行服务器端更改。您将不得不添加标头:Access-Control-Allow-Origin: *。有关如何针对特定后端框架执行此操作的更多信息,请参见此处
话虽如此,由于您正在使用cordova,您也可以像这样覆盖浏览器的行为:
if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) {
    wv.getSettings().setAllowUniversalAccessFromFileURLs(true);
}
如果您正在使用Webview。如果您不想直接干扰Webview,您也可以在res/xml/cordova.xml中设置<access uri="*" subdomains="true" />。有关更多详细信息,请参见http://docs.phonegap.com/en/1.9.0/guide_whitelist_index.md.html

我没有使用PhoneGap,我只是在WebView中打开HTML文件,所以我没有配置文件。 - user3703527
抱歉,其中一个标签是Cordova即PhoneGap。我提出的第一和第二个解决方案仍然可以正常工作。在第二个解决方案中,wv是您的WebView - ShaneQful
在第一个解决方案中,我将在哪里编写这个 Access-Control-Allow-Origin: *? - user3703527
关于您关于第二个答案的问题,我不确定您具体指的是什么,但是这段代码应该用于您在Android中的WebView对象上。如果您正在使用代码创建WebView,则应已可以访问它以运行上述代码。如果您在xml中指定了它,则可以在onCreate中使用final WebView wv = (WebView)this.findViewById(R.id.yourwebviewsid);来访问它。 - ShaneQful
我想使用你提出的第一个解决方案,但是只针对特定域名(出于安全考虑)。问题在于我的Android应用程序WebView域名为“file:\”。有什么解决办法吗?我在Stack Overflow上发布了一个问题:http://stackoverflow.com/questions/34046811/allowing-android-webview-iframing-my-web-site-specificly - danfromisrael
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接