Аннотация:
Что же представляет собой плагин для Internet Explorer? Это обычный внутрипроцессный (In Process) COM-сервер (т.е. DLL-файл), который содержит объект, реализующий как минимум 2 интерфейса: IOleCommandTarget и IObjectWithSite.
Да, именно из-за фреймов. Плагин ищет ссылке на странице, содержащей FRAMESET, а там их естественно нет.
Кстати, если вы обратите внимание, то все download менеджеры предлагают сначала кликнуть где-нибудь по странице, а затем выбрать "скачать", "сохранить" и т.д. Они так делают именно для того, чтобы определить, в каком именно фрейме произошёл клик.
примерчик работает ... для простых сайтов, где все на htm ... с rsdn можно получить только индейскую национальную избу, а не список ссылок :( Из-за фреймов? (зависимость от расширения открываемой страницы я отключил)
всё же хотелось бы чтобы тут же было краткое описание создания com- сервера и внедрение в него компонентов , так как приходиться изучать всё о com прежде чем понят то что нужно
Вам всё равно придётся изучать COM, потому как без него написать что либо работающее с IE (будь то плагин или что угодно) невозможно. Я считаю, что в это случае изучать COM лучше по специальным статьям и книгам, чем по "кратким описаниям".
Посмотрите, например, вот эту статью: http://rsdn.ru/article/?com/introcom.xml
плагин работает, но только один раз :-(
после первого нажатия на кнопку он отрабатывает, и кнопка деактивируется. когда в IMyIEExtention::QueryStatus вместо проверки на .html я поставила просто
prgCmds[0].cmdf=OLECMDF_ENABLED;
на кнопку появилась возможность нажать второй раз, но после нажатия на нее Internet Explorer вылетает :-(
можно ли каким-то образом запускать плагин несколько раз?
Чудеса расказываете. У меня плагин работает сколько угодно раз.
Рассажите подробнее: какой браузер, какая сборка, что в .ini файле, сохраняет ли первый раз, что на странице и т.д.
я проверила еще несколько раз — иногда плагин работает устойчиво. причем бывает так, что на одной странице то работает, то вылетает.
ie 6.0.2600.0000
в ini:
.jpg
.htm
.gif
первый раз сохраняет
в основном я проверяла на www.yahoo.com
в сообщении об ошибке пишет This is usually a result ... function declared with one calling convention with a function pointer declared with a different calling convention
может, проблемы у меня. на моем ie висит еще 3 плагина и недописанный BHO
>в сообщении об ошибке пишет This is usually a result ... >function declared with one calling convention with a function >pointer declared with a different calling convention
Сделай в проекте calling convention функций __stdcall ом по умолчанию.
Спасибо прежде всего за статью.
Вопрос — у меня есть файл своего формата, я хочу чтобы этот файл загружался из ИНета и обрабатывался в ИЕ. Насколько я понимаю это должно быть реализовано похоже как например обработка ПДФ-файлов. Как это сделать? Какие интерфейсы должен поддерживать мой COM-сервер?
Спасибо.
Эта фича к эксплореру отношения не имеет. Нужно написать приложение, поддерживающее OLE (в VC++, кстати, есть соответствующий пункт в мастере) и правильно его зарегистрировать. Тогда, например, при попытке вставить файл вашего приложения в Word будет вызыватся это самое приложение, как OLE-сервер. Открытие файлов в IE — это частный случай.
В июньском номере "Программист"'а выйдет моя статья, посвящённая этому вопросу. И, как только мне будет позволено редакцией журнала, я сразу же размещу её здесь (при согласии редакции сайта, разумеется).
Спасибо, очень полезная статья.
Помогла мне в моей задаче. Правда есть еще несколько вопросиков.
Как можно сделать так, что бы добавленная кнопка в IE toolbar еще имела свойство динамически прятаться и показываться в зависимости от введения определенного URL в адрессной строке браузера. Интерессно какие функции они испльзуют с Customize при добавлении или удалении из списка 'Available toolbar buttons' в список'Current toolbar buttons'? Могу ли я испльзовать эти функции в своих приложениях?
Заранее благодарен.
Прошу прощения за то, что не ответил. Я совершенно забыл про этот вопрос.
Вскоре я опупбикую на этом сайте (если администрация не будет против) продолжение статьи про плагины для IE, где этотт вопрос будет подробно освещён.
У меня после нажатия на кнопку Edit, например, появляется список возможных редакторов (Notepad ,Word). Или это не общий тулбар?
Опять же, а как сделаны кнопка Back и Forward?
И еще. Есть два типа кнопок — одни состоят как бы из 2-х частей (картинка и стрелка), другие — просто картинка.
Если можно напишите и про это тоже.
В любом случае, большое спасибо за Ваши статьи, очень интересно.
Re: А как сделать кнопку с выпадающим списком? (-)
Это стандартные кнопки. Я имел в виду кнопки плагинов.
Насколько я знаю, добавить такую кнопку на общий тулбар нельзя. Для этого надо делать свой band на rebar'е эксплорера и делать с ним всё, что заблагорассудится. Как это сделать — в продолжении статьи.
Есть ли подобная рекомендация для Outlook Express?
Я уже отправил её администраторам сайта. Ответа пока нет. Надеюсь, что у них есть серьёзные причины для такой задержки с ответом.
Но всё же надо быть снисходительными, сейчас же лето!
Здравствуйте, Борис Гулай aka BoresExpress, Вы писали:
БГA>Статья:
БГA>Авторы: БГA> Борис Гулай aka BoresExpress
БГA>Аннотация: БГA>Что же представляет собой плагин для Internet Explorer? Это обычный внутрипроцессный (In Process) COM-сервер (т.е. DLL-файл), который содержит объект, реализующий как минимум 2 интерфейса: IOleCommandTarget и IObjectWithSite.
Кривой какой-то ком, олевью падает при попытке его создать.
Здравствуйте, Борис Гулай aka BoresExpress, Вы писали:
БГA>Статья:
БГA>Авторы: БГA> Борис Гулай aka BoresExpress
БГA>Аннотация: БГA>Что же представляет собой плагин для Internet Explorer? Это обычный внутрипроцессный (In Process) COM-сервер (т.е. DLL-файл), который содержит объект, реализующий как минимум 2 интерфейса: IOleCommandTarget и IObjectWithSite.
Существует ли возможность запретить IЕ показывать Download диалог для .COM, .EXE etc. файлов, и если нет, то как можно перехватить скачиваемый файл (или запретить его скачивание)?
Благими пожеланьями дорожку гладко выстелим (С)
Re: Написание Plugin'ов для Internet Explorer - I
От:
Аноним
Дата:
30.08.05 14:09
Оценка:
Здравствуйте, Борис Гулай aka BoresExpress,
Возможно ли отличить при обработке событий в Plugin'е нажатие на кнопку от выбора пункта меню?
Здравствуйте, Борис Гулай aka BoresExpress, Вы писали:
<>
Если скомпилировать с юникодом, то постигнет облом: некорректно написан код DllRegisterServer(), а именно.
Функции RegSetValue(.....LPCTSTR lpData,DWORD cbData) и RegSetValueEx(.....LPCBYTE lpData,DWORD cbData) измеряют длину строки в байтах.
А здесь им передаётся длина в элементах строки, т.е. в TCHAR'ах. Соответственно, в реестре наблюдаем строки, обкусанные до половины.