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