2

知道如何在我的 WinForms C# 应用程序中使用托管控件时收到有关脚本错误的通知WebBrowserOLECMDID_SHOWSCRIPTERROR,我目前以这种方式成功地做到了这一点:

private void handleError(mshtml.IHTMLDocument2 htmlDocument)
{
    var htmlWindow = htmlDocument.parentWindow;
    var htmlEventObject = htmlWindow.@event as mshtml.IHTMLEventObj2;

    _lineNumber = (int)htmlEventObject.getAttribute(@"errorLine");
    _characterNumber = (int)htmlEventObject.getAttribute(@"errorCharacter");
    _errorCode = (int)htmlEventObject.getAttribute(@"errorCode");
    _errorMessage = htmlEventObject.getAttribute(@"errorMessage") as string;
    _url = htmlEventObject.getAttribute(@"errorUrl") as string;
}

这按预期工作。

我目前无法解决的是获取 JavaScript 调用堆栈。

我在上面的示例中尝试了几件事:

_callStack = htmlEventObject.getAttribute(@"stack") as string;
_callStack = htmlEventObject.getAttribute(@"errorStack") as string;
_callStack = htmlEventObject.getAttribute(@"stackTrace") as string;
...

所有这些都返回一个空/NULL字符串。

是否不确定是否可以检索到这些信息,我的问题仍然是:

如何从托管 Internet Explorer Web 浏览器控件的应用程序中获取 JavaScript 错误的调用堆栈?

4

1 回答 1

1

我也不完全确定这是否可能,但我可能有一些与您的问题相关的有用信息。回到 IE7 天,我在 C++ 中的 WebBrowser 控件的自定义主机上工作,我仍然保留控件通过IServiceProvider从我的OLE 站点对象请求的服务 GUID 列表。其中一个接口是IDebugApplication,它可能会打开一扇通过. 那时我还没有尝试过。如果你准备好做进一步的研究,你可以使用这个项目作为起点,在 C# 中实现一个自定义的 WebBrowser 主机。IDebugApplication::AddStackFrameSniffer

于 2013-08-13T09:05:15.517 回答