javascript - 如何在 IE WebBrowser 控件中禁用 javascript 错误调试

标签 javascript c++ dialog webbrowser-control activex

应用程序正在使用 IE WebBrwoser 控件。但是有时会出现 javascript 错误对话框,以解决在 WebBrowser 元素上使用了这个 put_silent 属性,但这会禁用所有对话框。那么有没有办法在 WebBrowser 控件中禁用 Javascript 错误调试?

最佳答案

在您的控件上右键单击并单击检查元素。如果您没有禁用 IE 菜单,它应该会在右侧或底部打开开发人员窗口。选择“调试”选项卡,单击六边形并选中“不要停止异常”或“停止未处理的异常”。我相信这是浏览器的全局设置,所以你也许可以只从 IE 中完成。

Debugger

更新 1
首先实现 IDocHostUIHandler 并包装外部处理程序调用。它在 Mshtmhst.h 中声明,因此您可能必须包含它。不要忘记IUnknown成员,也必须被包裹。 ATL 向导可用于实现接口(interface),但无论如何您必须准确了解您所做的:

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 中指定的那样。
首先你得到 MSHTML 对象
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);

将现有的处理程序保存到您的类中,这样您就可以包装它的功能
//see myHandler is the instance of interface you implemented in first step
myHandler->externalHandler = spClientSite;

获取自定义文档:
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); 

在这一步之后,MSHTML 应该不会注意到任何东西,但是您将能够在 MyDocHostUIHandler 类中添加断点,并查看您的 MSHTML 调用了哪个函数以及何时调用。

关于javascript - 如何在 IE WebBrowser 控件中禁用 javascript 错误调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61139134/

相关文章:

c++ - 奇怪的标准输出行为

jquery - MVC 3 Controller 操作不接受来自 JQuery .POST 的值

android - 对话框从带有可点击链接的首选项 Activity 开始

delphi - 如何在默认 Unicode 的 Delphi XE 应用程序的消息对话框中使用 ASCII 艺术符号

javascript - 按自定义属性搜索亚马逊 Cognito 用户

c++ - 非成员函数模板什么时候有内部链接?

c++ - Win32 C/C++ 从字节数组中读取 BMP 宽度和高度

java - 如何使用 JavaScript 将异步事件从 Java 服务器发送到网站?

java - 如何使用 Selenium 通过 HtmlUnitDriver 单击 Primefaces 数据表表行?

JavaScript - 如何转换 unicode 字符?英语数字到波斯语数字