[英]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.