2012-07-03 8 views
15

mam problemy z Access-Control-Allow-Origin na Androidzie 4.1Access-Control-Allow-Origin Błąd w Androidzie 4.1

W mojej aplikacji mam kilka lokalnych plików HTML i skrypty JavaScript, które używałem do pobierania danych z usług internetowych. Aż do wypróbowania Androida 4.1 nie było problemu, ale po wypróbowaniu Androida 4.1 dostałem ten błąd.

Przeczytałem wiele dokumentów, ale nie mogłem znaleźć sposobu na rozwiązanie tego problemu.

Odpowiedz

52

trzeba zrobić coś w rodzaju:

if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) 
    wv.getSettings().setAllowUniversalAccessFromFileURLs(true); 
+2

Dzięki, spróbuję. Ale emulatory interfejsu API Google nie mają tego problemu; to interesujące. –

+0

to powinno działać, miałem dokładnie ten sam problem w mojej aplikacji – slushi

+1

To działa! Tankuj! – mig35

0

Czy hosting usług internetowych pochodzi z tej samej domeny? Kiedyś otrzymałem ten błąd podczas wykonywania wywołania ajax do usługi w innej domenie. Jeśli masz kontrolę nad usługą internetową, można ustawić dostępu Origin-Control-Allow-: * w nagłówku, (chociaż w ten sposób nie jest bezpiecznym sposobem robić.)

+0

W rzeczywistości są one w tej samej domenie, ale w różnych subdomenach. Ale nie mogłem zrozumieć, dlaczego mam ten błąd tylko Android 4.1 i nie starszych wersji? Co się zmieniło? –

+0

Różne subdomeny nie są również dozwolone. Chrome działał naprawdę dziwnie (działało dobrze dla mojej prośby o "pobranie", ale zmieniał moją prośbę "post" na "OPCJE"), zajęło mi dużo czasu, aby znaleźć błąd. Błąd zniknął, gdy umieściłem usługi i kod klienta w tej samej poddomenie. – nilgun

+0

to jest niemożliwe dla mnie; ponieważ klient jest urządzeniem mobilnym :) dziękuję za pomoc. –

8

@ Jestem programistą i innymi osobami, które napotykają ten sam problem.

Rozwiązanie Slushis działa dobrze. Ale jeśli chcesz skompilować przeciw i wsparcia systemów poniżej API11 trzeba dodać:

if (Build.VERSION.SDK_INT >= 16) { 
    Class<?> clazz = webView.getSettings().getClass(); 
    Method method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class); 
    if (method != null) { 
     method.invoke(webView.getSettings(), true); 
    } 
} 

To będzie ładować i wywołać metodę w czasie wykonywania, więc można skompilować przykład Android 2.3.3.

+1

Dobre rozwiązanie. Czy istnieje opcja wyłączenia tej właściwości dla pakietu SDK w wersji 16.? – Karthick

Powiązane problemy