Android webview - XMLHttpRequest不能加载Origin <Access-Control-A

Android webview - XMLHttpRequest cannot load Origin <url> is not allowed by Access-Control-Allow-Origin

本文关键字:Access-Control-A Origin 加载 webview XMLHttpRequest 不能 Android      更新时间:2023-09-26

我有一个应用程序加载一个完整的网站在android的webview。android项目中的本地代码与网页进行交互;反之亦然,使用Android Jockey Library。

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

我的网站是在m.mywebsite.com使一个ajax调用api.mywebsite.com -特别是两个独立的子域,但这似乎在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());
    } 

有人遇到类似的问题或有解决方案吗?

谢谢!

你好,我认为你需要为你的网页视图设置一个设置。实际上,这个问题出现在API级别16以上的设备上。查找以下代码:

if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) {
  webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
}

希望对你有用

您可以通过从api.mywebsite.com页面发送适当的Access-Control-Allow-Origin标头来解决此问题,如下所示:

Access-Control-Allow-Origin: http://m.mywebsite.com