【问题标题】:How to get JavaScript stack trace with WebBrowser control?如何使用 WebBrowser 控件获取 JavaScript 堆栈跟踪?
【发布时间】:2013-08-14 15:58:44
【问题描述】:

知道how to get notified about script errors when hosting a WebBrowser control 在我的WinForms C# 应用程序中使用OLECMDID_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字符串。

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

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

【问题讨论】:

    标签: c# javascript winforms webbrowser-control callstack


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,我会试试的!
    • NP 但再想一想,您可能需要在 IE 高级选项中启用脚本调试才能工作。
    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多