Добавьте пользовательский css в html-код с помощью jsoup

#java #jquery #android #css #jsoup

#java #jquery #Android #css #jsoup

Вопрос:

Я работаю над приложением для Android, которое загружает HTML-страницу и показывает ее в webview. Проблема в том, что я хочу добавить свой пользовательский css (в загруженном HTML нет никакого CSS или ссылки на css). Как мне добавить пользовательский css в HTML-код с помощью jsoup? Я не могу изменить html. И как webview может открыть его впоследствии? Спасибо

Комментарии:

1. Это не идентичный вопрос. Я не могу загрузить его с помощью loadDataWithBaseURL, потому что в HTML нет ссылки на ccs. Поэтому я не могу ссылаться на css в локальном приложении.

Ответ №1:

Несколько способов. Вы можете использовать Element#append() для добавления некоторого фрагмента HTML к элементу.

 Document document = Jsoup.connect(url).get();
Element head = document.head();
head.append("<link rel="stylesheet" href="http://example.com/your.css">");
  

Или используйте Element#attr(name, value) для добавления атрибутов к существующим элементам. Вот пример, который добавляет style="color:pink;" ко всем ссылкам.

 Document document = Jsoup.connect(url).get();
Elements links = document.select("a");
links.attr("style", "color:pink;");
  

В любом случае, после модификации получите окончательную HTML-строку с помощью Document#html() .

 String html = document.html();
  

Запишите его в файл с помощью PrintWriter#write() (с правильной кодировкой).

 String charset = Jsoup.connect(url).response().charset();
// ...
Writer writer = new PrintWriter("/file.html", charset);
writer.write(html);
writer.close();
  

Наконец, откройте его в webview. Поскольку я не могу определить это с самого начала, вот просто ссылка с примером, который я считаю полезным:WebViewDemo.java. Кстати, я нашел ссылку в этом блоге (которую я, в свою очередь, нашел в Google).

Комментарии:

1. Какая кодировка правильная? Что я должен вставить туда «// …»?

2. Правильная кодировка — это Jsoup.connect(url).response().charset(); . //... Это просто код, который вам нужен для получения html .

3. Спасибо, но когда я помещаю это в eclipse, там написано: «Добавить объявление throws» … public void main(строка… аргументы) вызывает исключение FileNotFoundException, исключение UnsupportedEncodingException{ попробуйте{ … Что я должен сделать?

4. Просто добавьте throws IOException в сигнатуру метода или поместите его в try-catch. Вы изучили предложения, которые Eclipse выдал при нажатии на красную маркеру?

5. Хорошо, я ввел try-catch. Но теперь в webview написано: веб-страница в file:///android_asset/file.html не удалось загрузить как: Файл запроса не найден. file.html

Ответ №2:

Вероятно, самый простой способ — выполнить поиск и замену в HTML-тексте, чтобы вставить ваши пользовательские стили, перед загрузкой его в ваш WebView . Я делаю это в своем приложении BBC News, чтобы немного изменить стиль страницы новостной статьи. Мой код выглядит следующим образом:

 text = text.replace("</head>",
        "<style>h1 {font-size: x-large;} h1, div.date, div.storybody, img {margin:4px; padding:4px; line-height:1.25;}</style></head>");
  

Посмотрите, как я выполняю поиск и замену по head тегу end (включая мой собственный </head> тег в заменяемом сегменте. Это гарантирует, что новый фрагмент будет отображаться на странице в нужном темпе.

Ответ №3:

Существует несколько способов включить ccs в html

Я использую его, если он хранится у вас как внешний файл:

 <head><link rel="stylesheet" type="text/css" href="mystyle.css" /></head>
  

Если вы хотите поместить это прямо в HTML-файл:

 <head>
<style type="text/css">
hr {color:sienna;}
p {margin-left:20px;}
body {background-image:url("images/back40.gif");}
</style>
</head>
  

Или, если вы хотите изменить тег singel:

 <p style="color:sienna;margin-left:20px">This is a paragraph.</p>
  

* Редактировать

Ни у одного из этих примеров не должно возникнуть проблем с отображением.

Ссылка: W3 Schools CSS

Комментарии:

1. Проблема в том, что я загружаю HTML с веб-страницы, поэтому я не могу изменить HTML. Я хочу добавить код с помощью jsoup, а затем загрузить свой собственный css.

2. Я вижу, ваш вопрос вводил в заблуждение, звучал так, как будто у вас был контроль над html. Я отредактировал вопрос, чтобы указать другим правильный путь. У меня самого нет никакого опыта. без jsoup