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