Подтвердить что ты не робот

Перекрестный домен WebView Javascript из локального файла HTML

Я загружаю локальный html файл (из папки с ресурсами) в приложение WebView. В HTML я запускаю jQuery.getJSON(url). url - удаленный сервер.

Это действие выходит из строя, и я предполагаю, что это связано с другой проблемой происхождения (перекрестный домен). Я запускаю тот же файл на хроме, и там он конкретно говорит об этом.

Есть ли способ разрешить WebView в Android загружать данные с удаленного сервера в локальный загруженный HTML файл?

4b9b3361

Ответ 1

Сегодня утром я нашел решение, которое, похоже, работает.

Часть Java

Инициализировать свой WebView:

WebView _webView = (WebView) this.findViewById(R.id.id_of_your_webview_in_layout);

получить настройки WebView:

WebSettings settings = _webView.getSettings();

установить следующие настройки:

settings.setJavaScriptEnabled(true);
settings.setAllowFileAccessFromFileURLs(true); //Maybe you don't need this rule
settings.setAllowUniversalAccessFromFileURLs(true);

теперь вы можете загрузить свой html файл стандартным способом:

_webView.loadUrl("file:///android_asset/www/index.html");

Часть Javascript

Создать запрос XHR стандартным способом

var xhr = new XMLHttpRequest();
xhr.open("get", "http://google.com", false);
xhr.send();

Распечатайте результат где-нибудь

document.body.innerHTML = xhr.responseText

ВНИМАНИЕ:Эта процедура работает только на уровне API 16 или выше (по крайней мере, это говорит о документации).

Ответ 2

Не забудьте добавить разрешение Интернета в файл манифеста:

<uses-permission android:name="android.permission.INTERNET"/>

Также убедитесь, что вы используете JSONP-запросы (не забывайте & callback =? как указано выше)

Ответ 3

Я загружаю локальный html файл (из папки с ресурсами) в приложение WebView

Обратите внимание, что вы не смогли сказать, как вы это делаете. Я собираюсь предположить, что он был loadUrl() на file:///android_asset URL.

Есть ли способ разрешить WebView в Android загружать данные с удаленного сервера в локальный загруженный HTML файл?

Попробуйте использовать loadDataWithBaseURL() для загрузки содержимого, указав URL-адрес на удаленном сервере в качестве базового URL-адреса.

Ответ 4

Ajax вызывает обычную работу из локальной файловой системы. Более того, он станет междоменным. Так что это не сработает. Он работал в eclipse, потому что вы пытались с локального сервера.

Ответ 5

Решением, которое мы использовали, было использование Android для получения файлов обновлений с сервера, их размещения и перезаписи файлов в веб-папке, а затем просмотра.