none
Ошибка в IE10 и IDocHostUIHandler2::GetOverrideKeyPath() при печати RRS feed

  • Вопрос

  • IE10 содержит весьма неприятную ошибку. Когда он загружен как ActiveX Control (через CLSID_WebBrowser или напрямую как MSHTML) он использует данные полученные через методы GetOverrideKeyPath() или GetOptionKeyPath() интерфейса хоста IDocHostUIHandler/IDocHostUIHandler2, но ТОЛЬКО при отображении данных. Но если запустить режим печати или предварительного просмотра (команды IDM_PRINTPREVIEW и IDM_PRINT), то все настройки рендеринга берутся из основной ветки реестра, а не из той что указан методами GetOverrideKeyPath() или GetOptionKeyPath() .

    Как обойти эту проблему ?

    20 августа 2013 г. 13:21

Все ответы

  • Здравствуйте,

    Может Вы уже ознакомлены, но на всякий случай посмотрите эту статью:

    http://msdn.microsoft.com/en-us/library/bb508516%28v=vs.85%29.aspx


    Если вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"


    22 августа 2013 г. 7:28
    Модератор
  • Использование MSHTML в плане кастомизации интерфейса НИЧЕМ не отличается от WebBrowser Control - оба работают через интерфейсы IDocHostUIHandler, IDocHostUIHandler2 хоста. Скажу больше, WebBrowser Control сам с HTML не работает он грузит именно MSHTML и передает команды ему, сам занимаясь только вопросами скачивания и парсирования URL.

    И кстати, да, я использую у себя именно MSHTML (без прослойки WebBrowser Control) и в нем та же самая ошибка. Он не использует кастомизированные ветки реестра при печати. Дело в том, что как я знаю, при выполнении печати MSHTML грузит свою вторую копию (якобы из соображений безопасности) и передает ей контент для печати. Но при этом, автор сей чудной методики забыл, что настройки кастомизации (адрес интерфейса IDocHostUIHandler хоста) тоже надо бы передать во вторую копию. И как следствие, печать идет с текущими настройками браузера IE! И это безобразие тянется на моей памяти с IE9, возможно и в IE8 так же.

    На текущий момент я пытаюсь бороться с этим тем, что использую собственный шаблон печати (http://msdn.microsoft.com/en-us/library/aa753280(v=vs.85).aspx). Но это такая головная боль! да и далеко не все настройки в нем можно перекрыть.

    П.С.: Максим, вы как модератор наверняка имеет связь с программистами занимающимися IE. Очень прошу Вас, свяжитесь с ними. Пусть дадут дельный совет как решить эту проблему?

    В частности, сейчас при помощи шаблона печати мне удалось избавиться от колонтитулов и сделать свои поля печати. Но я не могу добиться чтобы печатался цветной фон элементов, который по умолчанию при печати выключен. Перекрывать настройки самого IE в его родной ветке реестра я не могу, нужно чтобы пользовательские настройки юзера в его браузере не менялись.


    • Изменено 23W 22 августа 2013 г. 7:55
    22 августа 2013 г. 7:50