我有一个应用程序可以在 android webview 中加载一个完整的网站。 android 项目中的 native 代码使用 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 对其进行了测试,但没有区别。
我已将大部分设置应用到我的 webview,如下所示:
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());
}
有人面临类似问题或对此有解决方案吗?
谢谢!
最佳答案
您好,我认为您需要为您的 WebView 设置一个设置。实际上这个问题是在API level 16以上的设备上出现的。找到以下代码:
if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) {
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
}
希望它对你有用。
关于javascript - Android webview - XMLHttpRequest 无法加载 Origin <url> 是 Access-Control-Allow-Origin 不允许的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24192929/