Загрузить локальный HTML в WebView?

Я хочу загрузить локальный html в WebView БЕЗ использования «file: ///», потому что это не разрешает файлы cookie. Есть ли способ использовать что-то вроде "localhost"?

Во-вторых, я не смог найти способ включить куки в getSettings (). Потому что файлы cookie не разрешены при использовании "file: ///".


person Jash Sayani    schedule 28.12.2010    source источник


Ответы (5)


Вы можете делать только что-то подобное. Это решение загружает HTML из строковой переменной:

String html = "<html><body>Hello, World!</body></html>";
String mime = "text/html";
String encoding = "utf-8";

WebView myWebView = (WebView)this.findViewById(R.id.myWebView);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadDataWithBaseURL(null, html, mime, encoding, null);

РЕДАКТИРОВАТЬ: попробуйте установить первый параметр (baseURL) loadDataWithBaseURL () для ваших нужд.

person Community    schedule 28.12.2010
comment
@ user113215: но вы читали ссылку на документацию для метода loadDataWithBaseURL (), не так ли ?? 4-й аргумент называется кодировкой, поэтому я назвал кодировку переменной ... как вы можете видеть здесь, она используется для выходной кодировки: myexperiencewithandroid.blogspot.de/2011/09/ ... вам также следует прочитать это: en.wikipedia.org/wiki/Character_encoding ... так что я не вижу вашей проблемы. - person ; 01.01.2013
comment
но здесь в примере не используется схема (данные), загружаются только локальные данные HTML, которые должны отображаться в WebView: если базовый URL-адрес использует схему данных, этот метод эквивалентен вызову loadData (), а historyUrl игнорируется . - person ; 02.01.2013
comment
Ах, это сбивает с толку. Я исследовал источник Android, и вы правы. Использование этого метода со схемой URL data: приводит к вызову nativeLoadUrl() (где encoding обозначает кодировку Base64 или URL), но в противном случае этот метод приводит к вызову nativeLoadData() (где encoding обозначает набор символов). - person quietmint; 03.01.2013

Попробуйте этот код. Меня устраивает.

WebView mDesc = findViewById(R.id.descWv);
WebSettings settings = mDesc.getSettings();
settings.setDefaultTextEncodingName("utf-8");
mDesc.loadData(mDescText, "text/html; charset=utf-8",null);
person Alican Temel    schedule 03.03.2015
comment
Что такое mDesc? Без этого ответ бесполезен. - person Ky Leggiero; 22.09.2016
comment
@Supuhstar Спасибо за внимание. mDesc - это веб-просмотр. Я отредактировал свой код. - person Alican Temel; 04.02.2017

Если вы хотите получить доступ localhost через Android, вам нужно использовать http://10.0.2.2:35643/, где 35643 - это конкретный порт, если это необходимо.

person sahhhm    schedule 28.12.2010

Для меня работал следующий код.

String base64EncodedString = null;
try {
    base64EncodedString = android.util.Base64.encodeToString(
        (preString+mailContent.getBody() + postString).getBytes("UTF-8"), 
        android.util.Base64.DEFAULT);
} catch (UnsupportedEncodingException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
if (base64EncodedString != null)
{
    wvMailContent.loadData(base64EncodedString, "text/html; charset=utf-8", "base64");  
}
else
{
wvMailContent.loadData(preString+mailContent.getBody() + postString, "text/html; charset=utf-8", "utf-8");
person Dev.Sinto    schedule 06.09.2013

person    schedule
comment
Хороший фрагмент кода, только отсутствует определение String javascrips;. - person SoftWyer; 10.06.2012
comment
javascrips - это текст любого HTML-файла. вроде ‹html› ‹body› ... ‹/html› - person Viren Savaliya; 07.09.2012
comment
Я делаю дополнительный шаг. webview.loadUrl (файл: ///android_res/raw/help.html); - person wjl; 26.09.2012
comment
view.loadDataWithBaseURL (file: /// android_res / raw / - это путь к локальным изображениям, где веб-страница создается из текста (строка javascrips) и путь к требуемому изображению, где она расположена. - person Viren Savaliya; 01.10.2012