javascript - Android webview - XMLHttpRequest 无法加载 Origin <url> 是 Access-Control-Allow-Origin 不允许的

标签 javascript android ajax webview cross-domain

我有一个应用程序可以在 android webview 中加载一个完整的网站。 android 项目中的 native 代码使用 Android Jockey 库与网页交互,反之亦然。

在一个状态下一切正常接受我遇到了XMLHttpRequest cannot load ... Origin <url> is not allowed by Access-Control-Allow-Origin错误。当网站(在 webview 中加载)对后端 api 进行 ajax 调用时,就会发生这种情况。

我的网站在 m.mywebsite.comapi.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/

相关文章:

javascript - 未捕获错误 : Syntax error, 无法识别的表达式:悬停

javascript - 用 cheerio 检测内联元素?

javascript - JSON 到 ajax 中的 HTML 表

javascript - 更改 Angular.js 中 $http.delete 的内容类型

android - 无法使用 Firebase 控制台发送数据消息

javascript - Ajax 调用 Controller 需要很长时间

javascript - 转换宽度为负值的条形图

javascript - 制作sql删除按钮来提交表单

android - Android "SuperNotCalledException:Activity did not call through to super.OnCreate()"错误

Android Studio - 将 com.google.android.gms 的版本更新到 11.6.0