Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Chromium-当用户单击网页中的按钮时,在Delphi应用程序中启动一个命令_Delphi_Button_Hyperlink_Tchromium - Fatal编程技术网

Delphi Chromium-当用户单击网页中的按钮时,在Delphi应用程序中启动一个命令

Delphi Chromium-当用户单击网页中的按钮时,在Delphi应用程序中启动一个命令,delphi,button,hyperlink,tchromium,Delphi,Button,Hyperlink,Tchromium,我在Delphi应用程序中使用Chromium组件 我喜欢以下行为: 当用户单击网页中的特定按钮时,Delphi应用程序(“容器”)必须执行一个命令(使用…)启动外部可执行文件 有可能吗?更新: 由于您实际上已经为单击事件请求了DOM事件侦听器,请检查以下示例,以侦听Google搜索按钮单击事件(ID为gbqfba)的元素: 检查事件:OnBeforeBrowse。。。您将有权访问请求的链接(request.Url),因此,您将能够启动外部应用程序application@Whiler,而不仅仅是

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

我喜欢以下行为:

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

有可能吗?

更新:

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


检查事件:OnBeforeBrowse。。。您将有权访问请求的链接(request.Url),因此,您将能够启动外部应用程序application@Whiler,而不仅仅是请求链接,我考虑的更多的是:
if(request.Method='POST')和(navType=navType\u FORMSUBMITTED)和(request.Url='https://login.example.com/login')然后
如果此条件通过,则将True返回到
结果
并执行您想要的任何操作。这就是为什么我问背后是什么;-)+1.o) )
ShellExecute(句柄'open','notepad.exe',nil',c:\Windows\',SW_SHOWNORMAL)(无论他想要什么)非常感谢,这部分解决了我的问题:事实上,我需要以下东西:当点击网页中的按钮时,是否有可能从Chromium组件向宿主应用程序发出通知?好的,如果我想要一个“之后”通知呢?我的意思是,在你的例子中,如果我想在浏览器收到对POST的响应时收到通知?这是个好问题,但不会那么容易,唯一干净的方法是通过请求回调,因为浏览器本身无法知道当POST请求成功后登录时,您将被导航到什么位置,失败或发生意外错误。但这超出了这个问题的范围,试着用这个具体问题来发布新问题。我不确定你所说的“在一个地方”是什么意思,但这个解决方案看起来像是我所期待的那种解决方案。至于兼容性说明,我认为编写代码需要Delphi2009的唯一原因是匿名函数。如果它们是独立函数,那么该代码可以与Chrome控件使用的任何Delphi版本一起使用。
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;