WebView и предобработка страницы

Ответить
Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

WebView и предобработка страницы

Сообщение Fry » 26 янв 2014, 18:17

Всем привет!

Хочу написать приложение, которое отображает во WebView один сайт. Для удобной работы с сайтом мне нужно на лету сделать предобработку html-страниц. Проще говоря, мне нужно перехватить код html-страницы когда она скачена, отредактировать, и отправить в WebView. Нужно, чтобы для пользователя переходы между страницами проходили прозрачно (WebView работает как Webclient).

Как сделать такую "модернизацию" с использованием стороннего JS скрипта я нашел. Но хотелось изменять страницу средствами Java.

Кто знает, как это сделать?
Arbeit macht Fry

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: WebView и предобработка страницы

Сообщение altwin » 26 янв 2014, 19:56

Если документ имеет правильную DOM структуру - разбирать обычным парсером, как xml и с ним работать.
Изображение

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: WebView и предобработка страницы

Сообщение Fry » 26 янв 2014, 20:37

Проблема не в том, как обработать HTML (его можно и как строку порубать), а в том - как получить доступ к HTML файлу, который
1. Был запрошен пользователем через WebView
2. Скачен, но еще не отобразился в WebView.

То есть я не знаю как его прехватить и получить к нему доступ.
Arbeit macht Fry

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: WebView и предобработка страницы

Сообщение altwin » 26 янв 2014, 20:41

Fry писал(а):Проблема не в том, как обработать HTML (его можно и как строку порубать), а в том - как получить доступ к HTML файлу, который
1. Был запрошен пользователем через WebView
2. Скачен, но еще не отобразился в WebView.

То есть я не знаю как его прехватить и получить к нему доступ.
Средствами Android framework -сомневаюсь. Так можно: http://habrahabr.ru/post/184738/.
Или опять же сервис в облаке выполняет curl / wget запрос к сайту и отдает вам html. Хотите обработанный, хоитите обрабатывайте.
Или не запускайте webview, отправляйте запрос get -ом и обрабатывайте результат, далее уже на готовом отдавайте его в webview
Изображение

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: WebView и предобработка страницы

Сообщение Fry » 26 янв 2014, 21:15

Курлы тут не помогут, т.к. проблема не в скачивании контента. Это можно было бы через HttpClient делать, а результат обрабатывать, и не изобретать велосипед.

Проблема в том, что эти данные подставить в WevView, работающий как Вебклиент. Ведь юзер тыкает по ссылками, переходя со страницы на страницу.
Arbeit macht Fry

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: WebView и предобработка страницы

Сообщение altwin » 26 янв 2014, 21:32

Fry писал(а):Курлы тут не помогут, т.к. проблема не в скачивании контента. Это можно было бы через HttpClient делать, а результат обрабатывать, и не изобретать велосипед.

Проблема в том, что эти данные подставить в WevView, работающий как Вебклиент. Ведь юзер тыкает по ссылками, переходя со страницы на страницу.
т.е. вы хотите изменить отображение чужих сайтов динамически не зная куда именно занесет пользователя и делать это все перед тем как оно загрузится в webview? Если бы такая возможность была - она была бы багом и ее бы пофиксили :)
Изображение

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: WebView и предобработка страницы

Сообщение Fry » 26 янв 2014, 21:42

Нанец-то! :) Именно этого я и хочу.
А т.к. webView будет работать только с одним сайтом, пользователь за его пределы не уйдет )
Arbeit macht Fry

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: WebView и предобработка страницы

Сообщение altwin » 26 янв 2014, 21:57

Fry писал(а):Нанец-то! :) Именно этого я и хочу.
А т.к. webView будет работать только с одним сайтом, пользователь за его пределы не уйдет )
ну так и загрузите весь сайт курлом и делайте с ним, что хотите. Ну или можно переопределить класс WebView и в методе loadURL после получения ответа изменить его перед запуском Activity. Но я такого не делал и даже исходники не смотрел.
Изображение

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: WebView и предобработка страницы

Сообщение Fry » 26 янв 2014, 22:03

Я пока решил делать через jsoup в асинхронном потоке (для скачивания и обработки страниц). Урлы для него получать из WebView (перехватом) и подменять их на сохраненные страницы, которые получаются в результате деятельность jsoup.

Попробую так.
Arbeit macht Fry

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: WebView и предобработка страницы

Сообщение altwin » 26 янв 2014, 22:12

jsoup - это же просто парсер, это тоже самое, что просто загружать get() -ом и разбирать. Но разве jsoup позволяет менять содержимое? Или хотя бы подменять стили и т.д. Не проще загрузить весь сайт и использовать локальную копию?
Изображение

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: WebView и предобработка страницы

Сообщение Fry » 26 янв 2014, 22:22

>jsoup - это же просто парсер, это тоже самое, что просто загружать get() -ом и разбирать.
Ну да, просто удобнее разбирать + есть встроенные методы для соединения.

>Но разве jsoup позволяет менять содержимое?
Нет, менять содержимое думаю переопределением методов webclient.

>Или хотя бы подменять стили и т.д.
Стили вроде есть. Заодно узнаю.

>Не проще загрузить весь сайт и использовать локальную копию?
Там сайт размером примерно с хабр - не проще.
Arbeit macht Fry

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: WebView и предобработка страницы

Сообщение Fry » 26 янв 2014, 23:56

C супом облом :(
Он умеет выдирать из связки html и css куски html, но не умеет возвращать все, кроме этих кусков.
А мне в этой задачи нужно именно это.
Arbeit macht Fry

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: WebView и предобработка страницы

Сообщение altwin » 27 янв 2014, 00:24

Fry писал(а):C супом облом :(
Он умеет выдирать из связки html и css куски html, но не умеет возвращать все, кроме этих кусков.
А мне в этой задачи нужно именно это.
есть еще такое: http://jericho.htmlparser.net/docs/index.html, внизу страницы приведены альтернативные парсеры, еще можно написать свой... Опять же как я и говорил - http://developer.android.com/reference/ ... arser.html, В любом случае - это парсер, если jsoup строит DOM структуру, а он это делает, поскольку проводит проверку и завершает не закрытые теги. Стоит покопатьс в коде, возможно зафиксировать дерево в момент его формирования, куда то сохранить и уже работат с ним.
Изображение

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: WebView и предобработка страницы

Сообщение Fry » 27 янв 2014, 11:58

Имхо проблема в css-файлах, которые подключаются к странице (их, кстати, может быть несколько). Получается, мало дернуть часть страницы, нужно дернуть и их. И вот как это все после парсера подсунуть WebView - вопрос. Там же просто строка на выходе.

Нужно найти что-то, что может скачать страницу со всем ее содержимом (возможно, даже вместе с картинками) в отдельную кэш-папку. То есть примерно то, что делает броузер, сохраняя страницу. И потом страницу после обработки подложить WebView.

По сути, мой вопрос свелся к тому, как скачать страницу с потрохами )
Arbeit macht Fry

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: WebView и предобработка страницы

Сообщение altwin » 27 янв 2014, 12:13

Fry писал(а):Имхо проблема в css-файлах, которые подключаются к странице (их, кстати, может быть несколько). Получается, мало дернуть часть страницы, нужно дернуть и их. И вот как это все после парсера подсунуть WebView - вопрос. Там же просто строка на выходе.

Нужно найти что-то, что может скачать страницу со всем ее содержимом (возможно, даже вместе с картинками) в отдельную кэш-папку. То есть примерно то, что делает броузер, сохраняя страницу. И потом страницу после обработки подложить WebView.

По сути, мой вопрос свелся к тому, как скачать страницу с потрохами )
По сути тема - бесполезные рассуждения, как я вам и говорил в самом начале, если бы была возможность это сделать - ее бы пофиксили. Вам нужно менять поведение webkit, по поводу css - оно еще и в less/sass формате может быть и компилироваться динамически для пользователя- какая разница? Вы что все стили менять собираетесь? Если вы владелец сайта - добавьте мобильную версию, если нет, это не только не этично, но и по меньшей мере глупо, поскольку структуру сайта владелец может сменить, вы заново код переписывать будете?

Нет никакой проблемы в том, чтобы запустить сокет между сервером и вашим браузером, перехватывать заголовки, заменять содержимое и т.д. Все это никакого отношения к программированию под Android не имеет. Да в чем проблема, скачать сайт curl(я уже 10 раз повторяю) заменить все? Какая нафиг разница размером с хабр он или нет? Вы действительно думаете, что Хабр весит много мб? В базу положите html и ссылки на ресурсы. Размер будет никакаой.

P.S. я вам тут давно пытаюсь объяснить, что подмена содержимого веб страницы на лету - называется вирусом.
Изображение

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: WebView и предобработка страницы

Сообщение Fry » 27 янв 2014, 12:42

>Вам нужно менять поведение webkit, по поводу css - оно еще и в less/sass формате может быть и компилироваться динамически для пользователя- какая разница? Вы что все стили менять собираетесь?

Да не надо мне их менять, я их скачать хочу.

>Если вы владелец сайта - добавьте мобильную версию, если нет, это не только не этично, но и по меньшей мере глупо, поскольку структуру сайта владелец может сменить, вы заново код переписывать будете?

Ну да, и враперы чужих сайтов часто делаются по такому принципу. Просто они, в основном, меняют дизайн на лету "иньекцией" JS. Как тут: http://habrahabr.ru/post/117885/. Если я ответа не найду, мне придется делать также.

>Да в чем проблема, скачать сайт curl(я уже 10 раз повторяю) заменить все? Какая нафиг разница размером с хабр он или нет?

Выкачивание сайта курлом - идея бредовая, это я вам уже десятый раз объясняю )
Помимо размера, сайты являются динамической штукой. Мне что - при изменении контента заставлять весь архив выкачивать снова?

> Вы действительно думаете, что Хабр весит много мб?
Сотни мб - легко.

>я вам тут давно пытаюсь объяснить, что подмена содержимого веб страницы на лету - называется вирусом.
Ну тогда полинтернета - это вирус :) Броузер ставит на страницы свои шрифты - вирус, Опера мобайл сжимает траф - вирус, ридер режим в айпаде - опять вирус. Все вирус!
Arbeit macht Fry

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: WebView и предобработка страницы

Сообщение altwin » 27 янв 2014, 12:58

Fry писал(а): > Вы действительно думаете, что Хабр весит много мб?
Сотни мб - легко.

>я вам тут давно пытаюсь объяснить, что подмена содержимого веб страницы на лету - называется вирусом.
Ну тогда полинтернета - это вирус :) Броузер ставит на страницы свои шрифты - вирус, Опера мобайл сжимает траф - вирус, ридер режим в айпаде - опять вирус. Все вирус!
Сам Хабр со своим содержимым в виде ссылок никогда не будет весить даже 100 мб, а качать картинки никто не заставляет, содержимое получается get -ом, нужное выбирается и кладется в базу. далее выводится со своими стилями и т.д., если контент обновляется, точно так -же догружается и кладется в базу/выводится опять таки как угодно. Так же, как никто не мешает открывать свой template страницы в который без всякой базы подставлять отфильтрованное содержимое.
Не пол интернета а 80% нарушают авторские права, являются вирусом/несут фишинговые ссылки и т.д., Если сайт содержит уникальный контент - вы нарушаете авторское право, если сайт содержит уникальный дизайн - вы нарушаете авторское право, если вы меняете содержимое web страницы "на лету" - антивирус считает вас вирусом. Если владелец сайта пишет письмо в поддержку google -вам аккаунт получает бан, а вы становитись очередным человеком жалующимся на хабре на то, какой плохой google -банит просто так.. Браузер - ставит шрифты, меняет цвет ссылок, поскольку им управляет пользователь лично для себя, вы же предлагаете приложение отнимая часть целевой аудитории у автора, в люом случае не вижу смысла продолжения дискусий - удачи! ;)

P.S. с другой стороны, эти нарушения не всегда замечают / принимают меры, или просто не сразу, да и вы не web студия, чтобы бояться бана.
Изображение

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: WebView и предобработка страницы

Сообщение Fry » 27 янв 2014, 13:23

> в люом случае не вижу смысла продолжения дискусий - удачи!

Я тоже не вижу. Спасибо за альтернативное мнение!

2all. Способ выкачивания страницы с залинкованными css продолжается. Если кто-нибудь знает, как это сделать - буду признателен )
Arbeit macht Fry

Ответить