Кросс-домен Javascript WebView из локального файла HTML - PullRequest
28 голосов
/ 27 декабря 2011

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

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

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

Ответы [ 5 ]

53 голосов
/ 06 декабря 2012

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

Часть 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 голосов
/ 25 ноября 2012

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

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

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

0 голосов
/ 23 сентября 2015

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

0 голосов
/ 12 января 2012

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

0 голосов
/ 28 декабря 2011

Я загружаю локальный HTML-файл (из папки активов) в приложение WebView

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

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

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

...