WebView и предобработка страницы
WebView и предобработка страницы
Всем привет!
Хочу написать приложение, которое отображает во WebView один сайт. Для удобной работы с сайтом мне нужно на лету сделать предобработку html-страниц. Проще говоря, мне нужно перехватить код html-страницы когда она скачена, отредактировать, и отправить в WebView. Нужно, чтобы для пользователя переходы между страницами проходили прозрачно (WebView работает как Webclient).
Как сделать такую "модернизацию" с использованием стороннего JS скрипта я нашел. Но хотелось изменять страницу средствами Java.
Кто знает, как это сделать?
Хочу написать приложение, которое отображает во WebView один сайт. Для удобной работы с сайтом мне нужно на лету сделать предобработку html-страниц. Проще говоря, мне нужно перехватить код html-страницы когда она скачена, отредактировать, и отправить в WebView. Нужно, чтобы для пользователя переходы между страницами проходили прозрачно (WebView работает как Webclient).
Как сделать такую "модернизацию" с использованием стороннего JS скрипта я нашел. Но хотелось изменять страницу средствами Java.
Кто знает, как это сделать?
Arbeit macht Fry
Re: WebView и предобработка страницы
Если документ имеет правильную DOM структуру - разбирать обычным парсером, как xml и с ним работать.
Re: WebView и предобработка страницы
Проблема не в том, как обработать HTML (его можно и как строку порубать), а в том - как получить доступ к HTML файлу, который
1. Был запрошен пользователем через WebView
2. Скачен, но еще не отобразился в WebView.
То есть я не знаю как его прехватить и получить к нему доступ.
1. Был запрошен пользователем через WebView
2. Скачен, но еще не отобразился в WebView.
То есть я не знаю как его прехватить и получить к нему доступ.
Arbeit macht Fry
Re: WebView и предобработка страницы
Средствами Android framework -сомневаюсь. Так можно: http://habrahabr.ru/post/184738/.Fry писал(а):Проблема не в том, как обработать HTML (его можно и как строку порубать), а в том - как получить доступ к HTML файлу, который
1. Был запрошен пользователем через WebView
2. Скачен, но еще не отобразился в WebView.
То есть я не знаю как его прехватить и получить к нему доступ.
Или опять же сервис в облаке выполняет curl / wget запрос к сайту и отдает вам html. Хотите обработанный, хоитите обрабатывайте.
Или не запускайте webview, отправляйте запрос get -ом и обрабатывайте результат, далее уже на готовом отдавайте его в webview
Re: WebView и предобработка страницы
Курлы тут не помогут, т.к. проблема не в скачивании контента. Это можно было бы через HttpClient делать, а результат обрабатывать, и не изобретать велосипед.
Проблема в том, что эти данные подставить в WevView, работающий как Вебклиент. Ведь юзер тыкает по ссылками, переходя со страницы на страницу.
Проблема в том, что эти данные подставить в WevView, работающий как Вебклиент. Ведь юзер тыкает по ссылками, переходя со страницы на страницу.
Arbeit macht Fry
Re: WebView и предобработка страницы
т.е. вы хотите изменить отображение чужих сайтов динамически не зная куда именно занесет пользователя и делать это все перед тем как оно загрузится в webview? Если бы такая возможность была - она была бы багом и ее бы пофиксилиFry писал(а):Курлы тут не помогут, т.к. проблема не в скачивании контента. Это можно было бы через HttpClient делать, а результат обрабатывать, и не изобретать велосипед.
Проблема в том, что эти данные подставить в WevView, работающий как Вебклиент. Ведь юзер тыкает по ссылками, переходя со страницы на страницу.
Re: WebView и предобработка страницы
Нанец-то! Именно этого я и хочу.
А т.к. webView будет работать только с одним сайтом, пользователь за его пределы не уйдет )
А т.к. webView будет работать только с одним сайтом, пользователь за его пределы не уйдет )
Arbeit macht Fry
Re: WebView и предобработка страницы
ну так и загрузите весь сайт курлом и делайте с ним, что хотите. Ну или можно переопределить класс WebView и в методе loadURL после получения ответа изменить его перед запуском Activity. Но я такого не делал и даже исходники не смотрел.Fry писал(а):Нанец-то! Именно этого я и хочу.
А т.к. webView будет работать только с одним сайтом, пользователь за его пределы не уйдет )
Re: WebView и предобработка страницы
Я пока решил делать через jsoup в асинхронном потоке (для скачивания и обработки страниц). Урлы для него получать из WebView (перехватом) и подменять их на сохраненные страницы, которые получаются в результате деятельность jsoup.
Попробую так.
Попробую так.
Arbeit macht Fry
Re: WebView и предобработка страницы
jsoup - это же просто парсер, это тоже самое, что просто загружать get() -ом и разбирать. Но разве jsoup позволяет менять содержимое? Или хотя бы подменять стили и т.д. Не проще загрузить весь сайт и использовать локальную копию?
Re: WebView и предобработка страницы
>jsoup - это же просто парсер, это тоже самое, что просто загружать get() -ом и разбирать.
Ну да, просто удобнее разбирать + есть встроенные методы для соединения.
>Но разве jsoup позволяет менять содержимое?
Нет, менять содержимое думаю переопределением методов webclient.
>Или хотя бы подменять стили и т.д.
Стили вроде есть. Заодно узнаю.
>Не проще загрузить весь сайт и использовать локальную копию?
Там сайт размером примерно с хабр - не проще.
Ну да, просто удобнее разбирать + есть встроенные методы для соединения.
>Но разве jsoup позволяет менять содержимое?
Нет, менять содержимое думаю переопределением методов webclient.
>Или хотя бы подменять стили и т.д.
Стили вроде есть. Заодно узнаю.
>Не проще загрузить весь сайт и использовать локальную копию?
Там сайт размером примерно с хабр - не проще.
Arbeit macht Fry
Re: WebView и предобработка страницы
C супом облом
Он умеет выдирать из связки html и css куски html, но не умеет возвращать все, кроме этих кусков.
А мне в этой задачи нужно именно это.
Он умеет выдирать из связки html и css куски html, но не умеет возвращать все, кроме этих кусков.
А мне в этой задачи нужно именно это.
Arbeit macht Fry
Re: WebView и предобработка страницы
есть еще такое: http://jericho.htmlparser.net/docs/index.html, внизу страницы приведены альтернативные парсеры, еще можно написать свой... Опять же как я и говорил - http://developer.android.com/reference/ ... arser.html, В любом случае - это парсер, если jsoup строит DOM структуру, а он это делает, поскольку проводит проверку и завершает не закрытые теги. Стоит покопатьс в коде, возможно зафиксировать дерево в момент его формирования, куда то сохранить и уже работат с ним.Fry писал(а):C супом облом
Он умеет выдирать из связки html и css куски html, но не умеет возвращать все, кроме этих кусков.
А мне в этой задачи нужно именно это.
Re: WebView и предобработка страницы
Имхо проблема в css-файлах, которые подключаются к странице (их, кстати, может быть несколько). Получается, мало дернуть часть страницы, нужно дернуть и их. И вот как это все после парсера подсунуть WebView - вопрос. Там же просто строка на выходе.
Нужно найти что-то, что может скачать страницу со всем ее содержимом (возможно, даже вместе с картинками) в отдельную кэш-папку. То есть примерно то, что делает броузер, сохраняя страницу. И потом страницу после обработки подложить WebView.
По сути, мой вопрос свелся к тому, как скачать страницу с потрохами )
Нужно найти что-то, что может скачать страницу со всем ее содержимом (возможно, даже вместе с картинками) в отдельную кэш-папку. То есть примерно то, что делает броузер, сохраняя страницу. И потом страницу после обработки подложить WebView.
По сути, мой вопрос свелся к тому, как скачать страницу с потрохами )
Arbeit macht Fry
Re: WebView и предобработка страницы
По сути тема - бесполезные рассуждения, как я вам и говорил в самом начале, если бы была возможность это сделать - ее бы пофиксили. Вам нужно менять поведение webkit, по поводу css - оно еще и в less/sass формате может быть и компилироваться динамически для пользователя- какая разница? Вы что все стили менять собираетесь? Если вы владелец сайта - добавьте мобильную версию, если нет, это не только не этично, но и по меньшей мере глупо, поскольку структуру сайта владелец может сменить, вы заново код переписывать будете?Fry писал(а):Имхо проблема в css-файлах, которые подключаются к странице (их, кстати, может быть несколько). Получается, мало дернуть часть страницы, нужно дернуть и их. И вот как это все после парсера подсунуть WebView - вопрос. Там же просто строка на выходе.
Нужно найти что-то, что может скачать страницу со всем ее содержимом (возможно, даже вместе с картинками) в отдельную кэш-папку. То есть примерно то, что делает броузер, сохраняя страницу. И потом страницу после обработки подложить WebView.
По сути, мой вопрос свелся к тому, как скачать страницу с потрохами )
Нет никакой проблемы в том, чтобы запустить сокет между сервером и вашим браузером, перехватывать заголовки, заменять содержимое и т.д. Все это никакого отношения к программированию под Android не имеет. Да в чем проблема, скачать сайт curl(я уже 10 раз повторяю) заменить все? Какая нафиг разница размером с хабр он или нет? Вы действительно думаете, что Хабр весит много мб? В базу положите html и ссылки на ресурсы. Размер будет никакаой.
P.S. я вам тут давно пытаюсь объяснить, что подмена содержимого веб страницы на лету - называется вирусом.
Re: WebView и предобработка страницы
>Вам нужно менять поведение webkit, по поводу css - оно еще и в less/sass формате может быть и компилироваться динамически для пользователя- какая разница? Вы что все стили менять собираетесь?
Да не надо мне их менять, я их скачать хочу.
>Если вы владелец сайта - добавьте мобильную версию, если нет, это не только не этично, но и по меньшей мере глупо, поскольку структуру сайта владелец может сменить, вы заново код переписывать будете?
Ну да, и враперы чужих сайтов часто делаются по такому принципу. Просто они, в основном, меняют дизайн на лету "иньекцией" JS. Как тут: http://habrahabr.ru/post/117885/. Если я ответа не найду, мне придется делать также.
>Да в чем проблема, скачать сайт curl(я уже 10 раз повторяю) заменить все? Какая нафиг разница размером с хабр он или нет?
Выкачивание сайта курлом - идея бредовая, это я вам уже десятый раз объясняю )
Помимо размера, сайты являются динамической штукой. Мне что - при изменении контента заставлять весь архив выкачивать снова?
> Вы действительно думаете, что Хабр весит много мб?
Сотни мб - легко.
>я вам тут давно пытаюсь объяснить, что подмена содержимого веб страницы на лету - называется вирусом.
Ну тогда полинтернета - это вирус Броузер ставит на страницы свои шрифты - вирус, Опера мобайл сжимает траф - вирус, ридер режим в айпаде - опять вирус. Все вирус!
Да не надо мне их менять, я их скачать хочу.
>Если вы владелец сайта - добавьте мобильную версию, если нет, это не только не этично, но и по меньшей мере глупо, поскольку структуру сайта владелец может сменить, вы заново код переписывать будете?
Ну да, и враперы чужих сайтов часто делаются по такому принципу. Просто они, в основном, меняют дизайн на лету "иньекцией" JS. Как тут: http://habrahabr.ru/post/117885/. Если я ответа не найду, мне придется делать также.
>Да в чем проблема, скачать сайт curl(я уже 10 раз повторяю) заменить все? Какая нафиг разница размером с хабр он или нет?
Выкачивание сайта курлом - идея бредовая, это я вам уже десятый раз объясняю )
Помимо размера, сайты являются динамической штукой. Мне что - при изменении контента заставлять весь архив выкачивать снова?
> Вы действительно думаете, что Хабр весит много мб?
Сотни мб - легко.
>я вам тут давно пытаюсь объяснить, что подмена содержимого веб страницы на лету - называется вирусом.
Ну тогда полинтернета - это вирус Броузер ставит на страницы свои шрифты - вирус, Опера мобайл сжимает траф - вирус, ридер режим в айпаде - опять вирус. Все вирус!
Arbeit macht Fry
Re: WebView и предобработка страницы
Сам Хабр со своим содержимым в виде ссылок никогда не будет весить даже 100 мб, а качать картинки никто не заставляет, содержимое получается get -ом, нужное выбирается и кладется в базу. далее выводится со своими стилями и т.д., если контент обновляется, точно так -же догружается и кладется в базу/выводится опять таки как угодно. Так же, как никто не мешает открывать свой template страницы в который без всякой базы подставлять отфильтрованное содержимое.Fry писал(а): > Вы действительно думаете, что Хабр весит много мб?
Сотни мб - легко.
>я вам тут давно пытаюсь объяснить, что подмена содержимого веб страницы на лету - называется вирусом.
Ну тогда полинтернета - это вирус Броузер ставит на страницы свои шрифты - вирус, Опера мобайл сжимает траф - вирус, ридер режим в айпаде - опять вирус. Все вирус!
Не пол интернета а 80% нарушают авторские права, являются вирусом/несут фишинговые ссылки и т.д., Если сайт содержит уникальный контент - вы нарушаете авторское право, если сайт содержит уникальный дизайн - вы нарушаете авторское право, если вы меняете содержимое web страницы "на лету" - антивирус считает вас вирусом. Если владелец сайта пишет письмо в поддержку google -вам аккаунт получает бан, а вы становитись очередным человеком жалующимся на хабре на то, какой плохой google -банит просто так.. Браузер - ставит шрифты, меняет цвет ссылок, поскольку им управляет пользователь лично для себя, вы же предлагаете приложение отнимая часть целевой аудитории у автора, в люом случае не вижу смысла продолжения дискусий - удачи!
P.S. с другой стороны, эти нарушения не всегда замечают / принимают меры, или просто не сразу, да и вы не web студия, чтобы бояться бана.
Re: WebView и предобработка страницы
> в люом случае не вижу смысла продолжения дискусий - удачи!
Я тоже не вижу. Спасибо за альтернативное мнение!
2all. Способ выкачивания страницы с залинкованными css продолжается. Если кто-нибудь знает, как это сделать - буду признателен )
Я тоже не вижу. Спасибо за альтернативное мнение!
2all. Способ выкачивания страницы с залинкованными css продолжается. Если кто-нибудь знает, как это сделать - буду признателен )
Arbeit macht Fry