WebView — просмотр HTML из Total Commander

Лет этак десять назад написал я парочку плагинов к всенародно любимому файл-менеджеру Total Commander. В те годы он только-только сменил имя и плагинов к нему было не так много, как сейчас. Мне лично не хватало пары функций, и среди прочего — возможности нормального просмотра сохранённых HTML. Многие ещё помнят такую штуку, как dialup. Тогда он ещё оставался для многих жителей глубинки единственным способом доступа в Интернет. Безумно (по нынешним меркам) дорогим и с очень неудобной тарификацией — повременной. В таких условиях читать длинные статьи в режиме online не было решительно никакой возможности (если вы, конечно, не были миллионером). А потому вся мало-мальски интересная информация в огромном количестве сваливалась на жёсткий диск, дабы быть прочитанной позже — в оффлайне.

Иногда возникала необходимость быстренько пролистать с десяток таких вот сохранённых страниц. А поскольку основным рабочим инструментом тогда для меня был (да и сейчас остаётся) именно Total Commander, логично было использовать его возможности. Но, увы, просмотрщик TC (aka Lister) HTML смотрит весьма посредственно — без картинок и прочих прелестей. Именно тогда я задумал написать плагин, решающий эту проблему — т.е. умеющий смотреть HTML со всеми плюшками (в частности, картинками и CSS).

WebView

Вот как-то так выглядит WebView

Первая версия WebView была написана на Delphi с использованием компонента ThtmlViewer (ныне заброшенного). В сравнении с «голым» Lister’ом возможности уже были неплохие — отображалось форматирование (частично) и изображения (правда, не все). Но этого было недостаточно, и я стал искать другие варианты. Самый простой путь был очевиден — использовать движок Trident. Этот вариант отпал сам собой — в годы властвования IE6 с его набившим оскомину всем web-мастерам косяками от «ослика» лучше было держаться подальше. Chromium тогда ещё не существовал даже в проекте, его предок WebKit был доступен только для MacOS X, а Presto можно купить только за пару миллионов норвежских крон ( 🙂 ). Оставался один вариант — Gecko (читай — Firefox). Всё его плюсы, правда, для меня лично перечёркивал один жирный минус — написан этот движок на С++, а я этот язык недолюбливаю, предпочитая современные реализации Pascal (в ту пору это был Object Pascal в Delphi, сейчас — Free Pascal и Lazarus). Решение, как ни странно, всё же нашлось довольно быстро — в лице проекта Mozilla ActiveX. Реализация движка Gecko в виде ActiveX-контрола давала возможность легко использовать его в Delphi-программе — достаточно немного разобраться в API. В результате скрещивания ужа с ежом Delphi и Gecko и появился на свет WebView в его окончательном виде. Финальная (на сегодняшний день) версия этого плагина увидела свет в январе 2005 года. Скачать её по сей день можно из архива плагинов на wincmd.ru.

В течение всех этих лет мне периодически приходили письма от пользователей моей поделки. По большей части присылали переводы языкового файла на разные языки (всего переводов на сегодняшний день 20, включая русский и английский, сделанные мной). Несколько человек просили опубликовать исходники. И вот, наконец, у меня дошли руки — и сегодня я выкладываю исходники WebView. Сразу предупреждаю: ничего особенного интересного они из себя не представляют. Большая часть кода написана в 2003-2004 годах, и я уже сам не помню, как там всё устроено. Даже не проверял, компилируется ли этот код на новых версиях Delphi (я собирал последнюю версию в Delphi 7). Кроме всего прочего, проект Mozilla ActiveX давно почил, а значит использует старую версию движка Gecko.

Как бы то ни было — вот код и бинарники WebView последней версии. Будем считать, что код опубликован под лицензией BSD. Можете использовать в качестве примера работы с Gecko под Delphi, также как образец говнокода написания плагина к TC на Delphi.

PS. Если соберусь, то в ближайшее время выложу ещё несколько своих исходников — в годы оны понаписал немало, вроде как жалко, что всё лежит без дела. Но пока ничего не обещаю.

1 комментарий

  1. От thunder

    Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *