使用TWebBrowser时查看Web控制台



我正在使用TWebBrowser来显示在Vue中创建的网页,但我目前无法调试页面功能在浏览器(IE和Chrome(中可用但在TWebBrowser中不可用的情况。我正在寻找一种在显示TWebBrowser时从Delphi中访问web控制台或开发工具的方法,这样我就可以确定到底是什么阻止了页面的功能正常工作。

我试图实现一个使用IDeveloperConsoleMessageReceiver接口的TDeveloperConsoleMessageReceiver类。该类是在初始化TWebBrowser时创建的。然后在TWebBrowserDocumentComplete上,我实现了以下功能:

procedure TTTWebBrowser.WebBrowserDocumentCompleted(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);
var
Target : IOleCommandTarget;
Action : Cardinal;
Params : OleVariant;
const
IDM_ADDCONSOLEMESSAGERECEIVER = 3800;
CGID_MSHTML: TGUID = '{DE4BA900-59CA-11CF-9592-444553540000}';
begin
CallUserDocumentCompletedEvent(pDisp, URL);
if Assigned(WebBrowser.Document) then begin
Target := IOleCommandTarget(WebBrowser.Document);
Action := IDM_ADDCONSOLEMESSAGERECEIVER;
Params := EmptyParam;
Target.Exec(@CGID_MSHTML, Action, OLECMDEXECOPT_DODEFAULT, IDeveloperConsoleMessageReceiver(DeveloperConsole), Params);
end;
end;

其中DeveloperConsole是初始化时创建的DeveloperConsoleMessageReceiver类。当运行上述函数时,我在Exec上遇到访问冲突。

我该如何正确使用DeveloperConsoleMessageReceiver,或者有其他方法从Delphi中调试TWebBrowser

我使用NavigateComplete2事件,它可以工作。这是我的代码:

procedure TMainForm.WBNavigateComplete2(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
const
CGID_MSHTML: TGUID = '{DE4BA900-59CA-11CF-9592-444553540000}';
IDM_ADDCONSOLEMESSAGERECEIVER = 3800;
var
vin, vout: OleVariant;
begin
if FDebugConsole then // Call it only once
Exit;
vout := Null;
vin := Self as IDeveloperConsoleMessageReceiver;
(WB.Document as IOleCommandTarget).Exec(@CGID_MSHTML, IDM_ADDCONSOLEMESSAGERECEIVER, OLECMDEXECOPT_DODEFAULT
,vin, vout);
FDebugConsole := True;
end;

您只需调用IDM_ADDCONSOLEMESSAGERECEIVER一次,以后就可以导航到其他页面,控制台消息将继续到达。我的主窗体实现了IDeveloperConsoleMessageReceiver接口。

最新更新