Пишу плагин для IE.
Необходимо при сохранении страницы добавлять туда кое-какую инфу.
Я действовать по такому алгоритму:
1. Изменить саму страницу через IHTMLDocument2
2. Вызвать стандартную процедуру сохранения
3. Вернуть страницу в исходный вид
Но это не работает. Сохраняется именно исходная версия страницы. Изменения пропадают.
Как реализовать сохранение, чтобы можно было вносить изменения?
Можно, конечно, сначала сохранить исходный вариант, а потом в нем уже править...
Но тогда придется разбирать HTML... Может есть более красивый способ?
Можно, правда, получить коллекцию All, но тогда придется и процедуру сохранения вручную реализовать, а потом еще картинки подгружать.
HB>Как реализовать сохранение, чтобы можно было вносить изменения?
Думаю достаточно просто и реально воспользоваться DOM-интерфейсом MSXML. То есть сделать копию DHTML-дерева (начиная с корневого элемента), изменить его как угодно и после этого сохранить.
Здравствуйте, Иль, Вы писали:
HB>>Как реализовать сохранение, чтобы можно было вносить изменения?
Иль>Думаю достаточно просто и реально воспользоваться DOM-интерфейсом MSXML. То есть сделать копию DHTML-дерева (начиная с корневого элемента), изменить его как угодно и после этого сохранить.
А как же картинки? Стили CSS?
Их сохранять вручную?
Здравствуйте, HateBreeder, Вы писали:
HB>А как же картинки? Стили CSS? HB>Их сохранять вручную?
если уже не поздно...
Есть же вариант сначала сохранить страницу стандартной процедурой сохранения (ИЕ кстати берет в этом случае картинки и CSSы из кеша [если установлен Work offline] или иногда пытается взять их поновее прямо из источника, чем лично меня раздражает ), а потом переписать HTMLку поверх записанной IE.
Здравствуйте, HateBreeder, Вы писали:
HB>Пишу плагин для IE. HB>Необходимо при сохранении страницы добавлять туда кое-какую инфу. HB>Я действовать по такому алгоритму: HB>1. Изменить саму страницу через IHTMLDocument2 HB>2. Вызвать стандартную процедуру сохранения HB>3. Вернуть страницу в исходный вид HB>Но это не работает. Сохраняется именно исходная версия страницы. Изменения пропадают.
HB>Как реализовать сохранение, чтобы можно было вносить изменения?
Увы нельзя использовать стандартный метод IE Save, он берет все файлы из кеша. Т.е. сохраняет оригинальные документы. Если нужно сохранить с изменениями, мы делали примерно так:
1. Вносили изменения
2. пробегали по списку картинок, линков, скриптов, фреймов и сохраняли их в нужном месте + исправляли соответствующие линки. Для фрейсов вызывали туже самую процедуру как и для сохраненния основного HTML-я.
3. брали outerHTML от BODY
4. собирали HTML заголовок (мы не нашли метода получить полный HTML) HEAD, META, TITLe, LINK,...
5. и сохраняли в файле HTML заголовок + outerHTML от BODY
В общем вот и все. Всю статику брали из кеша.
Удачи,
Валерий.
ЗЫ. Скорее всего есть более простой метод сделать это, но... мы на тот момент не нашли этого...
Здравствуйте, Иль, Вы писали:
Иль>если уже не поздно...
Иль>Есть же вариант сначала сохранить страницу стандартной процедурой сохранения (ИЕ кстати берет в этом случае картинки и CSSы из кеша [если установлен Work offline] или иногда пытается взять их поновее прямо из источника, чем лично меня раздражает ), а потом переписать HTMLку поверх записанной IE.
Большое спасибо!
Такая идея мне приходила в голову. Но и тут есть загвоздка:
я вызываю стандартную функцию сохранения:
IWebBrowser2::ExecWB(OLECMDID_SAVEAS...)
Она выдает диалог, а потом сохраняет файл. Все отлично...
Но как потом узнать путь к этому сохраненному файлу? Чтобы его поправить?
Здравствуйте, gwg-605, Вы писали:
G6>Увы нельзя использовать стандартный метод IE Save, он берет все файлы из кеша. Т.е. сохраняет оригинальные документы. Если нужно сохранить с изменениями, мы делали примерно так: G6>1. Вносили изменения G6>2. пробегали по списку картинок, линков, скриптов, фреймов и сохраняли их в нужном месте + исправляли соответствующие линки. Для фрейсов вызывали туже самую процедуру как и для сохраненния основного HTML-я. G6>3. брали outerHTML от BODY G6>4. собирали HTML заголовок (мы не нашли метода получить полный HTML) HEAD, META, TITLe, LINK,... G6>5. и сохраняли в файле HTML заголовок + outerHTML от BODY G6>В общем вот и все. Всю статику брали из кеша. G6>Удачи, G6> Валерий. G6>ЗЫ. Скорее всего есть более простой метод сделать это, но... мы на тот момент не нашли этого...
Не могли бы вы скинуть код прохода по картинкам, линкам, фреймам и т.д.
Очень не хочется все это заново мутить...
Если не затруднит, скиньте пожалуйста на igor@progz.ru
Кстати, по поводу 4. Полный HTML я получал так: брал коллекцию all, ее нулевой элемент — это и есть весь HTML-файл.
Заранее спасибо!
HB>Если не затруднит, скиньте пожалуйста на igor@progz.ru
Скинул. HB>Кстати, по поводу 4. Полный HTML я получал так: брал коллекцию all, ее нулевой элемент — это и есть весь HTML-файл.
Спасибо.
Здравствуйте, gwg-605, Вы писали:
HB>>Если не затруднит, скиньте пожалуйста на igor@progz.ru G6>Скинул.
Огромное спасибо! Просто выручил!
HB>>Кстати, по поводу 4. Полный HTML я получал так: брал коллекцию all, ее нулевой элемент — это и есть весь HTML-файл. G6>Спасибо.
Я тут выяснил, что был не совсем прав.
Теперь делаю так: из коллекции all выбираю tags("html").
А потом беру первый элемент.
HB>Я тут выяснил, что был не совсем прав. HB>Теперь делаю так: из коллекции all выбираю tags("html"). HB>А потом беру первый элемент.
Я попробовал брать document.all(0).outerHTML — получаю весь HTML, это под IE6.
А по поводу html тэга, то в IE4 его в коллекции точно не было, а у нас была задача сделать совместимым с IE4 и выше.