【问题标题】:Delphi Chromium - launch a command in Delphi application when button in web page is clicked by userDelphi Chromium - 当用户单击网页中的按钮时,在 Delphi 应用程序中启动命令
【发布时间】:2012-05-23 18:12:42
【问题描述】:

我在 Delphi 应用程序中使用 Chromium 组件。

我想要以下行为:

当用户单击网页中的特定按钮时,Delphi 应用程序(“容器”)必须执行命令(使用...启动外部可执行文件)。

有可能吗?

【问题讨论】:

  • 检查事件:OnBeforeBrowse...您将有权访问请求的链接 (request.Url),因此,您将能够启动您的外部应用程序
  • @Whiler,不仅是请求链接,我还在考虑类似的事情:if (request.Method = 'POST') and (navType = NAVTYPE_FORMSUBMITTED) and (request.Url = 'https://login.example.com/login') then 如果此条件通过,则返回 True 到 Result 并执行您想要的任何操作。这就是为什么我问背后是什么;-)

标签: delphi button hyperlink tchromium


【解决方案1】:

更新:

由于您实际上已经为点击事件请求了 DOM 事件侦听器,请查看以下示例侦听 Google 搜索按钮点击事件(ID 为 gbqfba 的元素):

uses
  ShellAPI, cefvcl, ceflib;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Chromium1.Load('www.google.com');
end;

procedure OnClickEvent(const AEvent: ICefDomEvent);
begin
  ShellExecute(Form1.Handle, nil, 'notepad.exe', nil, nil, SW_SHOWNORMAL);
end;

procedure OnExploreDOM(const ADocument: ICefDomDocument);
var
  DOMNode: ICefDomNode;
begin
  DOMNode := ADocument.GetElementById('gbqfba');
  if Assigned(DOMNode) then
    DOMNode.AddEventListenerProc('click', True, OnClickEvent);
end;

procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean);
begin
  if Assigned(frame) then
  begin
    // here you should check the frame.Url to verify if you're on the right URL
    // before you try to search for the element and attach the event if found
    frame.VisitDomProc(OnExploreDOM);
  end;
end;

【讨论】:

  • +1 ;o)) ShellExecute(Handle, 'open', 'notepad.exe', nil, 'c:\Windows\', SW_SHOWNORMAL);(随心所欲)
  • 非常感谢,这部分解决了我的问题:实际上我需要以下内容:当点击网页中的按钮时,是否有可能拥有来自 Chromium 组件的通知来托管应用程序?
  • 好的,如果我想要一个“之后”通知怎么办?我的意思是,在您的示例中,如果我想要在浏览器收到对 POST 的响应时收到通知?
  • 好问题,但不会那么容易,恕我直言,唯一干净的方法是通过请求回调,因为浏览器本身无法知道您将被导航到什么或在哪里,例如POST 请求成功、失败或发生意外错误后的登录。但这超出了此问题的范围,请尝试使用此特定问题发布新问题。
  • 我不确定您所说的“在一个地方”是什么意思,但这个解决方案看起来就像我期待的那种解决方案。至于您的兼容性说明,我认为您编写代码需要 Delphi 2009 的唯一原因是匿名函数。如果它们是独立函数,那么代码将适用于 Chrome 控件适用的任何 Delphi 版本。
猜你喜欢
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多