Вопрос по android, xmlhttprequest, javascript, cross-domain – Access-Control-Allow-Origin Ошибка в Android 4.1

15

У меня проблемы с Access-Control-Allow-Origin на Android 4.1

В моем приложении у меня есть несколько локальных HTML-файлов и Javascripts, которые я использовал для получения данных из веб-сервисов. До попытки Android 4.1 не было никаких проблем, но после попытки на Android 4.1 я получил эту ошибку.

Я прочитал много документов, но не смог найти способ решить эту проблему.

Ваш Ответ

3   ответа
0

ать эту ошибку, делая ajax-вызов к службе в другом домене. Если у вас есть контроль над веб-сервисом, вы можете установить Access-Control-Allow-Origin: * в заголовке (хотя этот способ не является безопасным способом сделать это.)

На самом деле они находятся в одном домене, но в разных поддоменах. Но я не мог понять, почему я получил эту ошибку только Android 4.1, а не более старые версии? Что изменилось? bahadir arslan
это невозможно для меня; потому что клиент является мобильным устройством :) спасибо за вашу помощь. bahadir arslan
извините, я не могу понять. мой сервис установлен на sub.domain.com, и я пытаюсь подключить его с мобильного устройства; но я получил ошибку, потому что происхождение равно нулю и не разрешено Access-Control-Allow-Origin. bahadir arslan
Разные субдомены также не допускаются. Chrome действовал действительно странно (он работал нормально для моего запроса "get", но менял мой запрос "post" на запрос "OPTIONS"), мне потребовалось много времени, чтобы выяснить ошибку. Ошибка исчезла, когда я поместил сервисы и клиентский код в один и тот же поддомен.
Проблема в том, что если вы обслуживаетеdomainname.com/subdomainname URL, который использует ваш клиент, должен иметь то же имя субдомена. это URL, а не мобильное устройство.
52

if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) 
  wv.getSettings().setAllowUniversalAccessFromFileURLs(true);
что делать, если у меня есть проект под api11?
Спасибо, я попробую. Но эмуляторы API Google не имеют этой проблемы; это интересно. bahadir arslan
Я не хочу показаться глупым, но к какому файлу я добавлю это в свой проект?
это должно работать, у меня была та же проблема в моем приложении
Это работает! Спасибо!
8

Раствор Слуши отлично работает. Но если вы хотите компилировать и поддерживать системы ниже API11, вам нужно добавить следующее:

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);
    }
}

Это загрузит и вызовет метод во время выполнения, так что вы можете скомпилировать, например, с помощью Android 2.3.3.

Хорошее решение. Есть ли возможность отключить это свойство для версии ниже SDK 16.?

Похожие вопросы