如何使用WebBrowser控件获取JavaScript堆栈跟踪?

时间:2013-08-13 06:38:48

标签: c# javascript winforms webbrowser-control callstack

在我的WinForms C#应用程序中使用OLECMDID_SHOWSCRIPTERROR了解how to get notified about script errors when hosting a WebBrowser control,我目前以这种方式成功完成:

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字符串。

我是unsure if this information can be retrieved at all还是我的问题是

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

1 个答案:

答案 0 :(得分:1)

我不完全确定这是否可行,但我可能会提供一些与您的问题相关的有用信息。回到IE7,我在C ++中使用自定义主机进行WebBrowser控件,我仍然保留控件从OLE site objectIServiceProvider请求的服务GUID列表。其中一个接口是IDebugApplication,它可能会通过IDebugApplication::AddStackFrameSniffer打开一扇门来访问JavaScript堆栈帧。我当时没有尝试过。如果您准备进行进一步的研究,可以使用this project作为起点在C#中实现自定义WebBrowser主机。