07.02.2024, 17:56 | #1 |
Участник
|
Ax2012 ActiveX WebBrowser - странное поведение
Всем привет.
Хотелось обсудить странное поведение компонента Web browser. Мы используем этот ActiveX на форме. Отображаем при его помощи простую страничку (немного текста и картинок). Страничка сделана под Edge. Выяснилась интересная особенность. (все описание сделано для Ax2012- R3 но проблема актуальная и для 2009-й) Если для ActiveX контрола вызвать метод Navigate указав путь к файлу html то все отображается корректно, так как в Edge (как задумал наш верстальщик) Но если подготовленный html не сохранять в файл, а в виде строковой переменной htmlText скормить сразу ActiveX контролу (MyActiveXcontrol) вызовом X++: SysHelp::showHelp(MyActiveXcontrol, htmlText); то (Внимание!) ни фига мы не получим отображения как в Edge. Вокруг картинок будут черные рамочки (см файлы со скриншотами AsIE8_IE10_ShapeIsCorrupted.png и AsEdge_ShapeIsOk.png) Немного помедитировав над полученным отображением, я догадался что оно соответствует какому-то из режимов отображения (IE8, IE9, IE10). При отображении в последней версии IE можно настройкой совместимости по F12 также добиться черных рамочек.. Как-то непоследовательно себя ведет ActiveX Web browser Стали копать. Хочется, чтобы одинаково было. Выяснилось, что при вызове SysHelp::showHelp() аксапта сперва требует от контрола отобразить пустую страничку из ресурса res://mshtml.dll/blank.htm (см. метод SysHelp::initWebBrowser) затем получает Com объект Document (SysHelp::insertHTML2Document) и пишет в него текст html из переменной. И в этот момент ActiveX отрисовывает страничку. Но почему-то в режиме совместимости с предыдущей версией IE. технология такая же как описано тут https://habr.com/ru/articles/163841/ http://www.msvb.narod.ru/doc_webbrowser_p1.htm http://www.msvb.narod.ru/doc_webbrowser_p2.htm ) Одна из догадок в том, что шаблон пустой страницы res://mshtml.dll/blank.htm уже подразумевает режим совместимости, так что мы его не можем перекрыть в тексте нашего html. О чем-то подобном описано тут https://mpbox.ru/manuals/html/meta-t...ua-compatible/ Цитата:
PHP код:
Пробуем исправить. Делаем свой файлик пустышку, который используем для инициализации контрола вместо res://mshtml.dll/blank.htm, прописывая в его заголовке нужный нам режим совместимости PHP код:
И! Фокус не удался. Пробовали разные варианты Так PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
Даже взяли, сделали сперва Navigate на наш рабочий файлик с html, а затем его же содержимое скормили контролу через SysHelp::showHelp И так тоже не сработало ! Более того, в тех случаях, когда явно в файле инициализации стоял режим совместимости Edge - вообще ломалось исполнение метода SysHelp::insertHTML2Document !!! Вызов X++: activeX.document(); стал возвращать объект другого типа ! Если в нормальном случае это Com для которого ToString() дает значение DispHTMLDocument То теперь это Com, для которого ToString() дает значение JScriptTypeInfo а затем при попытке исполнить код X++: document.open(''); все валится с ошибкой : Цитата:
"Число аргументов, указанных в вызове функции, отличается от числа аргументов в объявлении метода."
Похоже у Edge движка какая-то другая объектная модель или другой интерфейс используется. И если уж страничка отобразилась в режиме совместимости Edge вызовом Navigate метода (т.е. в браузере подцепился движок от Edge, а не от IE какой-то из предыдущих версий), то для нее перестает работать получение document() и аксаптовский способ работы с Web browser ломается. В общем, очень странно. Может кто-нибудь знает как это побороть ? Есть альтернативы ? Может WebView2 ? https://learn.microsoft.com/ru-ru/mi...arted/winforms или задействовать .net контрол WebBrowser (там есть готовые методы NavigateToString и NavigateToStream) https://learn.microsoft.com/en-us/do...stem-io-stream) https://learn.microsoft.com/en-us/do...(system-string) P.S. Зачем понадобился весь этот гемор. Хотелось обойтись без сохранения html текста во временный файл, а сразу из X++ переменной подставлять созданный html Архив с файликами выложил (на форуме уже места нет для моих вложений) сюда : https://github.com/KozlovPavel677/Ax2012_WebBrowser Последний раз редактировалось Logger; 07.02.2024 в 18:28. |
|
|
За это сообщение автора поблагодарили: Товарищ ♂uatr (14). |
Теги |
activex, webbrowser |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|