如何使用dcef3启用远程调试

时间:2017-06-13 12:18:25

标签: delphi

我正在使用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不同。

1 个答案:

答案 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;