krigstask 'несложным' сценарием неполучится. Такой скрипт должен загрузить, распарсить таблицы стилей, HTML валидатор короч как минимум получется.
Тут нужна прога на движке браузера.
Я иногда сохраняю сайты(прогой WinHTTrack)- различные книги, руководства. Чтобы потом читать на КПК. Удобно использовать CSS, чтобы отрубить рекламу и прочий мусор, но мобильные браузеры слабо его держат(IE особенно), кроме того страницы и так медленно рендрендятся, хорошо бы мусор совсем удалить.
Отредактировано Logo (21-03-2008 20:22:48)
Отсутствует
Logo
Несогласен, но спорить не буду, движки бразуеров для такой задачи — забивание микроскопов гвоздями (-%Е
Ядрёная консоль делает меня сильней!
Отсутствует
Если без движка браузера, то нужно сделать маленькую программку, которая бы парсила HTML, выстраивала дерево объектов, затем парсила CSS в масштабах CSS2 или CSS2.1+часть CSS3, и, учитывая все селекторы, их вложенность, перекрытие стилей и так далее, рассчитывала display: none; для конкретных элементов, при этом для начала должны собираться все стили по всем linkам, importам, и конечно же контейнерам style и атрибутам style= и корректно рассчитываться весы элементов и порядок обработки и important, после чего делается вывод о порядке перекрытия стилей и уже вычисляется стиль для конкретного элемента. Затем мы все эти элементы собираем, и либо распарсиваем HTML и не нарушая вложенности тэгов удаляем, либо работаем с уже распарсенным, удаляя узлы из дерева тэгов. Не забывая при этом весь остальной код осталять в неприкосновенности. Раз плюнуть.
Отсутствует
Al_H
Не надо усложнять, если используется отдельный внешний CSS для скрытия мусора (как я понял), то можно учитывать только его правила, пренебрегая всеми остальными вариантами присвоения display: none.
А как это сделать через бразуер? Хотя бы алгоритм поясните.
Есть альтернативное предложение: открывать страницы в Fx/Opera и "печатать" их в pdf. После чего смотреть уже в таком виде.
Ядрёная консоль делает меня сильней!
Отсутствует
Не надо усложнять, если используется отдельный внешний CSS для скрытия мусора (как я понял),
Это почти не облегчает задачи(если без браузера), одни селекторы чего стоят.
Есть альтернативное предложение: открывать страницы в Fx/Opera и "печатать" их в pdf. После чего смотреть уже в таком виде.
Это будет изображение, на сколько я понимаю, по этому не подойдет. Т.к. экран у КПК/смарта маленький, придется елозить в лево-право, что жуть не удобно.
А как это сделать через бразуер? Хотя бы алгоритм поясните.
В DOM должно быть свойтво типа .style.display, яваскрипт будет загружать передаваемый пхп файл во фрейм, удалять все элементы с этим свойством ='none', и передавть обработанный код обратно пхп через POST.
Отсутствует
В DOM должно быть свойтво типа .style.display
Тогда уж
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Logo
Это почти не облегчает задачи(если без браузера), одни селекторы чего стоят
Это смотря какие селекторы. По-моему, обычно для блокировки используются несложные конструкции.
Это будет изображение, на сколько я понимаю
С каких это пор PDF у нас — изображение? Хотя, конечно, если PDF-читалка не умеет строчки переносить, тогда проблема есть.
В DOM должно быть свойтво типа .style.display, яваскрипт будет загружать передаваемый пхп файл во фрейм, удалять все элементы с этим свойством ='none', и передавть обработанный код обратно пхп через POST
Логично. Кстати, это полностью подходит под моё первое сообщение (-%Е
Ядрёная консоль делает меня сильней!
Отсутствует
krigstask
Да Вы понимаете, что для удаления не тех элементов, для которых прописано dasplay: none; , а тех, которые скрываются через display: none; - то есть с учетом наследования и переопределения и корректности синтаксиса, нужно писать движок, интерпретирующий CSS, и движок, интерпретирующий HTML. Задача класса создания нового браузера не на имеющемся движке. Потому что Вам нужно узнать 1. какие в итоге классы и прочие селекторы получают какие вычисленные значения атрибутов, 2. какие элементы и в какой иерархии должны составлять DOM документа, и 3. какие селекторы действуют на какие элементы. Потом в итоге Вы получаете DOM+computedStyle, и вот уже пройдя по нему удаляете лишние элементы, а затем из полученного DOM и исходного HTML составляете HTML без удаленных элементов. Если этот алгоритм сделать аккуратно, он не будет убивать в коде все конструкции, которые не понимает - типа вставок, символов национальных кодировок, атрибутов для клиентских скриптов, и прочего.
Вы считаете это тривиальной задачей?
Отсутствует
Al_H
Может, я неправ, но я вижу проблему так.
1. Дано:
[ul][uli]HTML-страница[/uli][uli]CSS-файл, фактически список элементов, подлежащих скрытию[/uli][/ul]
2. Примерный алгоритм действий:
[ol][oli]html-страница перегоняется в структуру, удобную для анализа (я недавно в рамках обучения Python'у загонял XML в список строк и кортежей из строк, булевых значений и словарей)[/oli][oli]обрабатывается список шаблонов элементов из CSS[/oli][oli]осуществляется проход по структуре из п. 1[/oli][oli]каждый элемент проверяется на соответствие условиям п. 2[/oli][oli]если элемент подлежит удалению, находится его граница и весь элемент удаляется[/oli][/ol]
Вот примерно так.
Добавлено Sun Mar 30 19:42:57 2008 :
Допущений, конечно, порядочно, но мне кажется, не слишком
Ядрёная консоль делает меня сильней!
Отсутствует
Это смотря какие селекторы. По-моему, обычно для блокировки используются несложные конструкции.
Как раз наооборот, тут нужна вся мощь селекторов, ибо специальных атрибутов class и id мусор обычно не имеет.
С каких это пор PDF у нас — изображение? Хотя, конечно, если PDF-читалка не умеет строчки переносить, тогда проблема есть.
Написал не подумавши, сохранение страницы совсем не подойдет, т.к. на выходе у нас html книга/мануал со ссылками, множеством страниц..
• CSS-файл, фактически список элементов, подлежащих скрытию
Там не просто список элементов, а селекторы, со всеми вытекающими...
Infocatcher
В js не очень шарю..
Отсутствует
Logo
Как раз наооборот, тут нужна вся мощь селекторов, ибо специальных атрибутов class и id мусор обычно не имеет
Там не просто список элементов, а селекторы, со всеми вытекающими...
Хватит пугать меня уже словом «селекторы», я его не боюсь (-;Е
Покажите уже примерный файл.
Написал не подумавши, сохранение страницы совсем не подойдет, т.к. на выходе у нас html книга/мануал со ссылками, множеством страниц..
А. Ну тогда да.
Ядрёная консоль делает меня сильней!
Отсутствует
Ну вот хотябы писал такие правила
DIV.subtocyel {
display:none;
}
body>img:first-child+table{ /*такую хрень хрен обработаешь*/
display:none;
}
Поддержка селекторов должна быть полной, хорошо еще если + 3 версии. Это вовсе не простой скрипт.
Отсутствует
Ну да, вторая запись — дело серьёзное. Но я с необходимостью таких конструктов не сталкивался никогда. А первая — элементарно
Ядрёная консоль делает меня сильней!
Отсутствует