Перекрестный домен WebView Javascript из локального файла HTML
Я загружаю локальный html файл (из папки с ресурсами) в приложение WebView.
В HTML я запускаю jQuery.getJSON(url). url - удаленный сервер.
Это действие выходит из строя, и я предполагаю, что это связано с другой проблемой происхождения (перекрестный домен). Я запускаю тот же файл на хроме, и там он конкретно говорит об этом.
Есть ли способ разрешить WebView в Android загружать данные с удаленного сервера в локальный загруженный HTML файл?
Ответы
Ответ 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 для получения файлов обновлений с сервера, их размещения и перезаписи файлов в веб-папке, а затем просмотра.