Аннотация:
Наверное, вам давно и порядком надоело контекстное меню, которое броузер выдает по умолчанию. На это есть весьма весомые причины. Забудем о таких практически безобидных командах, как Назад — Вперед. Мы переживем, хотя в нашем приложении они, в общем, и не нужны. Но предположим, что вы никому не хотите показывать исходный текст вашей странички (Показать в виде HTML), не говоря уж о такой вредной команде, как Показать в новом окне. Или, например, когда после (месяца, года) мучений ваш начальник (заказчик), случайно щелкнув правой клавишей и увидев эти знакомые словосочетания, восклицает: "Ха! Да чем же это вы занимались все это время? Это ведь не ваша разработка, а всем известный Internet Explorer"... Да, было бы гораздо лучше, если бы он произнес: "Эх! Да мои программисты, похоже, способны выиграть войну броузеров!" и даст вам хотя бы половину тех денег, которые вложило Microsoft в IE.
Словом, надеюсь, что я вас убедил. Настало время избавиться от этого ненавистного контекстного меню.
--
Как мы живем государственная тайна, на что — коммерческая, с кем — личная.
Можно ли подставить свой обработчик на пункт меню?
Как можно не заменяя пункты меню сделать так чтобы, например при выборе "Открыть в новом окне", сначала выполнялись мои действия, а затем уже непосредственно функция "Открыть в новом окне"?
Хотя все равно, можно и заменить пунк меню,просто я так понмаю придется писать свой код для открытия объекта в новом окне. Тогда вопрос станет так: как привязать свое событие к добавленном пункту.
как применить эти знания к изменению менюшки в Explorer, так как в данном описании как я понял всё это применителько к случаю когда 'ты' сам создаёшь свой броузер мастером. Или я совсем не понял материала. Вопрос как написать СOM интерфейс к IE5 который установлен у клиента локально на машине ? Прошу прочения если выгляжу глупцом но повторное чтение не даёт что то никаких прояснений .
Здравствуйте, Тимофей!
Вы читали колонку C++ Q & A в выпуске 09/2001 MSDN Magazine? Посмотрите по адресу http://msdn.microsoft.com/msdnmag/issues/01/09/default.asp
Paul DiLascia описывает более простой способ как избавиться от контекстного меню при использовании Microsoft WebBrouser Control. Я использовал этот способ в своей программе — все отлично работает.
Всего хорошего,
Никита.
Выдержка из статьи
...
There are two important things to note about this technique. First, it's powerful since now that you've subclassed the "real" Internet Explorer window, you can do almost anything you want. Second, it's really, really, really bad, and likely to get you in trouble if you aren't careful. Once you take over the Explorer window like this, all bets are off. Didn't your mother tell you that you're not supposed to subvert the browser? You're supposed to customize it through the official interfaces (IDocHostUIHandler)! But there's nothing like breaking the taboos to make your blood flow.
Paul DiLascia
Решайте сами.
--
Как мы живем государственная тайна, на что — коммерческая, с кем — личная.
Eta tsitata sovsem ne pro pervyi sposob kotoryi opisal DiLascia —
Fortunately, the problem is trivial to fix. You don't even have to write any code! Just add a line in your HTML page:
<BODY oncontextmenu="return false">
ТЧ>Авторы: ТЧ> Тимофей Чадов
ТЧ>Аннотация: ТЧ>Наверное, вам давно и порядком надоело контекстное меню, которое броузер выдает по умолчанию. На это есть весьма весомые причины. Забудем о таких практически безобидных командах, как Назад — Вперед. Мы переживем, хотя в нашем приложении они, в общем, и не нужны. Но предположим, что вы никому не хотите показывать исходный текст вашей странички (Показать в виде HTML), не говоря уж о такой вредной команде, как Показать в новом окне. Или, например, когда после (месяца, года) мучений ваш начальник (заказчик), случайно щелкнув правой клавишей и увидев эти знакомые словосочетания, восклицает: "Ха! Да чем же это вы занимались все это время? Это ведь не ваша разработка, а всем известный Internet Explorer"... Да, было бы гораздо лучше, если бы он произнес: "Эх! Да мои программисты, похоже, способны выиграть войну броузеров!" и даст вам хотя бы половину тех денег, которые вложило Microsoft в IE.
ТЧ>Словом, надеюсь, что я вас убедил. Настало время избавиться от этого ненавистного контекстного меню.
Прочитала вашу статью, в соответствии с ней чтобы убрать просмотр html кода
пишу в hpp файле
Всё замечательно и хорошо работает, пока мы не натыкаемся на страничку с ошибками в скриптах (Script Error). В этом случае без нашей реализации IDocHostUIHandler — загрузка проходит нормально, в status bar-е рисуется предупреждение (треугольничек с воскл. знаком и текст Error on page.). Если делаем свою реализацию — то получаем в случае ошибки полноценный диалог, который ест-но никому не нужен. Вопрос — как от него избавиться не нарушая функциональной работы IE?
Ответ был найден на просторах codeproject, там эту проблему пробовали решить собственной реализацией интерфейса IOleCommandTarget, где просто внаглую "забивалось" на сообщение об ошибке. Что по сути тоже не очень хорошо.
А как Вам удавалось разрешить эту проблему? поделитесь советом
AK>А как Вам удавалось разрешить эту проблему? поделитесь советом
Сам спросил — сам отвечаю. Нужно зимплементить в своем коде стандартное поведение.
Для этого берется пример из PopupBlocker с codeproject, только из метода Exec вырезаем проверку на OLECMDID_SHOWSCRIPTERROR, а в реализации всегда вызываем
return m_spDefaultOleCommandTarget->Exec(pguidCmdGroup, nCmdID, nCmdExecOpt, pvaIn, pvaOut);