【发布时间】:2014-06-12 19:55:48
【问题描述】:
我有一个应用程序可以在 android webview 中加载一个完整的网站。 android 项目中的本机代码使用 Android Jockey 库与网页交互,反之亦然。
在我遇到XMLHttpRequest cannot load ... Origin <url> is not allowed by Access-Control-Allow-Origin 错误的一种状态下,一切正常。当网站(在 webview 中加载)对后端 api 进行 ajax 调用时,就会发生这种情况。
我的网站位于 m.mywebsite.com,它对 api.mywebsite.com 进行 ajax 调用 - 特别是两个独立的子域,但这似乎在 iOS 上运行良好。
我正在 Android v4.4.2 上对此进行测试。通过再次编译目标 sdk 15 和 19 对其进行了测试,但没有区别。
我已将大部分设置应用于我的 web 视图,如下所示:
webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setBuiltInZoomControls(false);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setAppCacheEnabled(true);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
}
webView.getSettings().setSupportZoom(false);
webView.setWebChromeClient(new WebChromeClient());
webView.setInitialScale(0);
以下是我的骑师整合:
if (Utils.isNetworkAvailable(this)) {
jockey = JockeyImpl.getDefault();
jockey.configure(webView);
webViewClient = new MyWebViewClient(this);
jockey.setWebViewClient(webViewClient);
setJockeyEvents();
webView.loadUrl(EnvironmentManager.getStartUpURL());
}
有人遇到类似问题或有解决方案吗?
谢谢!
【问题讨论】:
-
您好,请问您在哪里可以解决这个问题?我们正在尝试从 System WebView 更改 http 和 websocket 调用的源头。所以我想我们和你有同样的问题,你解决了吗?
标签: javascript android ajax webview cross-domain