我正在使用dcef3在我的Delphi应用程序中嵌入浏览器。我想启用远程调试以检查嵌入式浏览器中运行的javascript代码。
我已经尝试在显示包含TChromium控件的父窗体时启用远程调试端口,但我不知道如何继续以实际访问调试器:
procedure TMapViewSingleSector.FormShow(Sender: TObject);
begin
CefRemoteDebuggingPort := 9000;
ChromeView.Load('http://localhost:8080/');
end;
但是,当我尝试从另一个Chrome浏览器访问localhost:9000时,页面无法加载。
编辑:我将CefRemoteDebuggingPort
初始化移到了表单初始化部分(在表单show之前)。现在,当我将谷歌浏览器指向端口9000时,我可以看到web组件。但是我有另一个错误:
inspector.js:10392 Uncaught TypeError: Object.observe is not a function
at WebInspector.Main._createSettings (inspector.js:10392)
at WebInspector.Main._gotPreferences (inspector.js:10384)
at WebInspector.InspectorFrontendHostStub.getPreferences (inspector.js:1352)
at WebInspector.Main._loaded (inspector.js:10383)
at windowLoaded (inspector.js:677)
注意:我的Chrome浏览器版本与DCEF3不同。
答案 0 :(得分:2)
我只是从代码中打开开发人员工具控制台。有ShowDevTools方法可以这样做。为此,您可以使用专用按钮或在HTML页面内创建一个假链接,并在OnBeforeBrowse事件中取消导航并显示控制台。例如,当有这个假链接时:
<html>
<body>
<a href="ShowDevTools.fake">Show console</a>
</body>
</html>
你可以在你的应用中写下这样的东西:
procedure TForm1.Chromium1BeforeBrowse(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const request: ICefRequest; isRedirect: Boolean; out Result: Boolean);
const
UrlShowDevTools = 'ShowDevTools.fake';
begin
{ if the user clicked link and URL equals to the fake one }
if (Request.TransitionType = TT_LINK) and (Request.Url = UrlShowDevTools) then
begin
{ cancel navigation }
Result := True;
{ show the developer tools console }
TChromium(Sender).ShowDevTools;
end;
end;