簡體   English   中英

如何使用WebBrowser控件獲取JavaScript堆棧跟蹤?

[英]How to get JavaScript stack trace with WebBrowser control?

我在WinForms C#應用程序中使用OLECMDID_SHOWSCRIPTERROR 托管WebBrowser控件時,知道如何獲得有關腳本錯誤的通知 ,我目前已通過這種方式成功完成了此操作:

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錯誤的調用堆棧?

我也不完全確定這是否可行,但是我可能會提供一些與您的問題有關的有用信息。 在IE7的日子里,我在C ++中為WebBrowser控件開發了一個自定義主機,並且仍然保留該控件通過IServiceProvider從我的OLE站點對象請求的服務GUID的列表。 這些接口之一就是IDebugApplication ,它可能為通過IDebugApplication::AddStackFrameSniffer訪問JavaScript堆棧框架打開了一扇門。 那時我還沒有嘗試過。 如果您准備進行進一步的研究,則可以將該項目用作在C#中實現自定義WebBrowser主機的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM