Как отключить javascript отладку ошибок в IE WebBrowser Control - PullRequest
0 голосов
/ 10 апреля 2020

Приложение использует IE Управление WebBrwoser. Однако иногда появляются javascript сообщения об ошибках, чтобы решить, что это свойство put_silent было использовано в элементе WebBrowser, но это отключает все диалоговые окна. Так есть ли способ отключить отладку ошибок Javascript в элементе управления WebBrowser?

1 Ответ

0 голосов
/ 10 апреля 2020

На вашем контроле сделайте правый клик и кликните на Inspect Element. Если вы не отключили меню IE, оно должно открыть окно разработчика справа или снизу. Выберите там вкладку «Отладка», нажмите на шестиугольник и отметьте «Не останавливаться на исключении» или «Остановить необработанное исключение». Я полагаю, что это глобальная настройка для браузера, поэтому вы можете сделать это, просто набрав IE.

Debugger

Обновление 1 Сначала реализуйте IDocHostUIHandler и оберните вызовы внешнего обработчика. Он объявлен в Mshtmhst.h, так что вы, вероятно, должны включить его. Не забывайте про членов IUnknown, также должны быть завернуты. Мастера ATL могут использоваться для реализации интерфейсов, но в любом случае вам нужно будет точно понять, что вы делаете:

class MyDocHostUIHandler: public IDocHostUIHandler
{
public:
   IDocHostUIHandler* externalHandler;
   HRESULT EnableModeless( BOOL fEnable)
   {
      return externalHandler->EnableModeless(fEnable);
   }
   HRESULT FilterDataObject(IDataObject* pDO, IDataObject** ppDORet)
   {
      return externalHandler->FilterDataObject(pDO, ppDORet)ș
   }
   .... Wrap all the functions from External Handler like above
};

Создайте экземпляр вашего класса:

MyDocHostUIHandler* myHandler = new MyDocHostUIHandler();

Затем в своем коде Звоните как указано в MSDN. Сначала вы получаете объект MS HTML

CComPtr<IHTMLDocument2> m_spDocument;
hr = m_WebBrowser->get_Document(&m_spDocument);// Get the MSHTML object

Затем вы получаете существующий обработчик по умолчанию

ComPtr<IOleObject> spOleObject;
hr = m_spDocument.As(&spOleObject);
ComPtr<IOleClientSite> spClientSite;//<--this will be the default handler
hr = spOleObject->GetClientSite(&spClientSite);

Сохраните существующий обработчик в своем классе, чтобы вы могли обернуть его functions

//see myHandler is the instance of interface you implemented in first step
myHandler->externalHandler = spClientSite;

Получить пользовательский do c:

ComPtr<ICustomDoc> spCustomDoc;
hr = m_spDocument.As(&spCustomDoc);//m_spDocument it is the pointer to your MSHTML

Теперь замените обработчик из HSMTML:

//myHandler is the instance of class you implemented above
spCustomDoc->SetUIHandler(myHandler); 

После этого шага MS HTML не должен ничего замечать, но вы сможете добавить точки останова в свой класс MyDocHostUIHandler и посмотреть, какая функция вызывается вашим MS HTML и когда.

...