AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.02.2010, 11:17   #1  
John_11 is offline
John_11
Участник
 
5 / 10 (1) +
Регистрация: 28.08.2009
WebBrowser
Есть форма на которой размещен ActiveX WEBBrowser.
Если на Web-странице встречается ссылка открывающая новое окно, то запускается Internet Explorer. Я хочу чтобы новые окна открывались в таком же ActiveX WEBBrowser.
Перекрываю метод ONnewWindow2
(http://support.microsoft.com/kb/184876)
X++:
// A new, hidden, non-navigated WebBrowser window is needed.
void onEvent_NewWindow2(COM _ppDisp, COMVariant /* boolean */ _Cancel)
{
    WebBrowser2.RegisterAsBrowser(true);
    _ppDisp =  WebBrowser2.Application();
}
WebBrowser2 – другой экземпляр компонента ActiveX WEBBrowser, который для эксперимента расположен на этой же форме.
Но никакого результата не получаю. Все равно при открытии ссылки в новом окне, запускается Internet Explorer.

Создаю аналогичный пример в Delphi. Перекрываю метод Onnewwindow
X++:
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
  WebBrowser2.RegisterAsBrowser := true;
  ppDisp := WebBrowser2.Application;
end;
На Delphi все работает. Достаточно и одной строчки ppDisp := WebBrowser2.Application;
Что нужно сделать чтобы пример заработал на X++ ? Может проблема скрыта в IDispatch?

Последний раз редактировалось John_11; 17.02.2010 в 11:31.
Старый 17.02.2010, 12:43   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Можно перекрыть событие OnNewWindow3 и в нем обрабатывать ссылку так
X++:
void onEvent_NewWindow3(COM _ppDisp, COMVariant /* boolean */ _Cancel, int _dwFlags, str _bstrUrlContext, str _bstrUrl)
{
    ;
    _Cancel.boolean( true );
    WebBrowser2.Navigate( _bstrUrl );
}
Первый вариант не проходит потому, что _ppDisp - это не ссылка на интерфейс, а класс, его инкапсулирующий. И простая замена ссылки на этот класс ничего не дает (внутри системы он все равно продолжает жить).
Да и есть сомнения,что, в конечно итоге, происходит возврат нового интерфейса в самом первом вызове NewWindow из браузера, даже если его подменить внутри ppDisp
__________________
Axapta v.3.0 sp5 kr2
Старый 18.02.2010, 13:58   #3  
John_11 is offline
John_11
Участник
 
5 / 10 (1) +
Регистрация: 28.08.2009
AndyD, предложенный Вами вариант работает, но
на некоторых страницах возникает ошибка (см. вложение)
Хотя пример с NewWindow2 на Delphi отрабатывает без ошибок.
Изображения
 

Последний раз редактировалось John_11; 18.02.2010 в 14:02.
Старый 24.09.2012, 16:26   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от John_11 Посмотреть сообщение
на некоторых страницах возникает ошибка (см. вложение)
Тоже пришлось с этим бороться. Нашёл здесь http://www.sql.ru/forum/actualthread.aspx?tid=527453, что надо сделать так:
X++:
WebBrowser2.Silent( true );
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:37.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.