提问者:小点点

Android webview - XMLHttpRequest无法加载原点< url >不被Access-Control-Allow-Origin允许


我有一个应用程序,它在android webview中加载了一个完整的网站。android项目中的本机代码与网页交互

一切正常接受我遇到的一个状态< code>XMLHttpRequest无法加载...起源

我的网站位于< code>m.mywebsite.com,它对< code>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());
    } 

有人面临类似的问题或有解决方案吗?

谢谢你!


共2个答案

匿名用户

嗨,我想您需要为web视图设置一个设置。实际上,这个问题来自于高于API级别16的设备。请查找以下代码:

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

希望这对你有用。

匿名用户

您可以通过从api.mywebsite上的页面发送适当的AccessControlAllowOrigin标题来解决此问题。com这样:

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