私はAndroid用のCordova(別名Phonegap)を使用して1年以上開発*しており、アプリをJelly Beanで実行できるようにしようとしていますが、次のエラーが発生します。
XMLHttpRequest cannot load http://127.0.0.1:40582/[somerandomstring]. Origin null is not allowed by Access-Control-Allow-Origin. at null:1
(およびlocalhostまたはfile://の使用を要求する後続のajaxの同様のエラー)テストのために、Access-Control-Allow-Originのセクションのconfig.xml内のすべてへのアクセスを許可します
<access origin="*"/>
<access origin="http://127.0.0.1*"/>
私の調査では、エラーがAndroidJellyBeanの時点でGoogleが行った設定変更に関連していることを発見しました。これが私が見つけたものです:From:https ://git-wip-us.apache.org/repos/asf?p=incubator-cordova-android.git; a = commitdiff; h = 07439ff9
-これはorg.apache.cordova.CordovaWebViewからのものです
// Jellybean rightfully tried to lock this down. Too bad they didn't give us a whitelist
// while we do this
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
Level16Apis.enableUniversalAccess(settings);
-これもorg.apache.cordova.CordovaWebViewからのものです
// Wrapping these functions in their own class prevents warnings in adb like:
// VFY: unable to resolve virtual method 285: Landroid/webkit/WebSettings;.setAllowUniversalAccessFromFileURLs
@TargetApi(16)
private static class Level16Apis {
static void enableUniversalAccess(WebSettings settings) {
settings.setAllowUniversalAccessFromFileURLs(true);
}
}
コルドバが変更を回避しようとしたのは良いことですが、残念ながらこれは機能しません...
こことここのこれらのSOスレッドで、次のように設定を変更するだけの一般的な解決策を見つけました。
if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
super.appView.getSettings().setAllowUniversalAccessFromFileURLs(true);
}
今、私は次の警告を受け取ります:
Call requires API level 16 (current min is 8)
android.webkit.WebSettings#setAllowUniversalAccessFromFileURLs
これが私のAndroidManifest.xmlのAPI用に持っているものです
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />
targetSdkVersionが16であるのではなく、minSdkVersionを16に変更する必要があるのはなぜですか?
考え?
注:現在、Cordova 2.0、Eclipse Indigo SR2(すべての更新が最新)、Android SDK(すべての更新が最新)、Windows 7 Home(すべての更新が最新)、Java 7Update7を使用しています。