delphi – 如何在TChromium中检测到点击?
我的Delphi应用程序中有一个TChromium控件,在我显示的页面上,有一个链接可以最小化应用程序.目前,我通过检测地址更改来检测用户何时单击该链接:
procedure TForm1.Chromium1AddressChange(Sender: TObject;const browser: ICefBrowser; const frame: ICefFrame; const url: ustring); begin if (url = 'file:///data/exiting.exit') then Form1.Close; if (url = 'file:///data/minimize.min') then Application.Minimize; end; 但是,副作用是浏览器的URL被更改,这是我不想要的.如何在没有URL更改的情况下检测用户何时单击链接? 解决方法
如果我的问题正确,那么您的HTML文档中就会出现如下链接:
<a href="minimize.min">Minimize</a> 并且当您单击此链接时,您希望在应用程序中执行某些操作,但您不希望导航到该链接,因为它只是用于识别操作的虚假链接.好吧, 正确的方法是保留虚假站点导航并利用DOM事件监听器.然后,您使用什么元素或事件进行交互并不重要.让我们有这个简约的HTML文档: <html> <body> <a id="minimize" href="">Minimize</a> </body> </html> 您可以注意到,它导航到无处,但它仍将呈现为链接.它还具有DOM探索识别所需的唯一ID标识符.现在让我们为最小化元素添加click事件的监听器.一旦加载帧就完成此绑定,这通过触发 unit Unit1; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,cefvcl,ceflib; type TForm1 = class(TForm) Chromium1: TChromium; procedure FormCreate(Sender: TObject); procedure Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Chromium1.Load('C:File.html'); end; procedure MinimizeClickEvent(const AEvent: ICefDomEvent); begin ShowMessage('Here the application can be minimized.'); end; procedure OnExploreDOM(const ADocument: ICefDomDocument); var DOMNode: ICefDomNode; begin // here we attempt to find our "minimize" element DOMNode := ADocument.GetElementById('minimize'); // and if we find it,we attach to its click event our MinimizeClickEvent // procedure so whenever the element will be clicked,that procedure will // execute if Assigned(DOMNode) then DOMNode.AddEventListenerProc('click',True,MinimizeClickEvent); end; procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean); begin if Assigned(frame) then frame.VisitDomProc(OnExploreDOM); end; end. 通过对代码或HTML文档进行细微更改,您可以收听所选的任何事件或元素,因此您可以使用您网站上的按钮: <html> <body> <button id="minimize" type="button">Minimize</button> </body> </html> 当然,您可以根据需要为事件监听器附加尽可能多的元素. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |