- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 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>
当单击此链接时,您希望在应用程序中执行某些操作,但您不想导航到该链接,因为它只是一个仅用于识别操作的虚假链接。嗯,OnAddressChange
是一个需要处理的错误事件,因为当帧的地址发生更改时,显示处理程序会触发它。因此,现在取消从那里到该假网站的导航为时已晚。在 DCEF 1 中,您可以为 OnBeforeBrowse
编写一个处理程序。 ,但即使这样也不是“如此干净”的解决方案,因为您必须解析框架导航到的 URL。
正确的方法是离开假站点导航并使用 DOM 事件监听器。那么您在交互中使用什么元素或事件并不重要。让我们来看看这个简约的 HTML 文档:
<html>
<body>
<a id="minimize" href="">Minimize</a>
</body>
</html>
正如您所注意到的,它导航到任何地方,但它仍然会呈现为链接。它还具有 DOM 探索识别所需的自己唯一的 id
标识符。现在,我们为 minimize
元素添加 click
事件的监听器。加载框架后,此绑定(bind)就会完成,这是通过触发 OnLoadEnd
来报告的。事件。在那里,我们将探索 DOM 树,找到 minimize
元素并将 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>
当然,您可以根据需要为任意数量的元素附加事件监听器。
关于delphi - 如何检测 TChromium 中的点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21925494/
我们正在尝试将内置浏览器组件从 TWebBrowser 更改为 TChromium 。它主要用于显示 Google 和 Bing 的 map 。从 javascript 到 Delphi 的通信是通过
我想跟踪用户在 TChromium 内点击了多少次。我不在乎他是否点击了“空白”/链接/按钮/图像/等。我只想知道他点击了多少次。我希望 TChromium 中有 Onclick 事件,但没有。我如何
我使用TChromium 。我分配了 AWebPageAsString,它是一个带有灰色背景颜色的静态 HTML 页面。 FBrowser := TChromium.Create(pnlHolder)
我使用来自 (http://code.google.com/p/delphichromiumembedded/) 的 Chromium 嵌入式框架的最新 TChromium Delphi 包装器。 字
我的 Delphi 应用程序中有一个 TChromium 控件,在我显示的页面上,有一个最小化应用程序的链接。目前,我通过检测地址更改来检测用户何时单击该链接: procedure TForm1.Ch
已经有一段时间了,我不知道如何隐藏 TChromium 中的滚动条。是否有一个过程/函数或属性? 最佳答案 这应该在文档中完成,因此在加载后调用例如: Chromium1.Browser.MainFr
我有一个来自 Delphi Chromium Embedded (http://code.google.com/p/delphichromiumembedded) 的 TChromium 浏览器。我想
我正在尝试使用 DCEF3 TChromium 作为 TWebbrowser 组件的替代品。我下载了这些软件包并将其安装在我的 IDE (Delphi 2007) 上。 我正在 demos\guicl
我正在使用 TChromium 进行授权。我有变量 Chromium1: TChromium; 。我需要销毁表单隐藏上的 Chrome 并在表单显示上显示。 (因为 chromium 有时会引发异常“
如何使用 Tchromium Delphi 更改组合框的值?版本Tchromimum DCEF3 Лист Account List
我发现了精彩的Delphi Chromium用于在 Delphi 表单中嵌入 Chrome 的项目。经过一些修改后,它在 Delphi7 中运行良好,我可以运行演示应用程序。 但是,当我使用该组件制作
这是我的 last question 的延续。在那个问题中,我展示了一个涉及 TWebBrowser 生成线程的问题,该线程在浏览器销毁后仍然存在。虽然没有人能够提供该问题的解决方案,但有人认为该问题
我正在尝试使用以下代码(在 XE2 下)枚举 DOM 节点。 我从 SO 中给出的答案中借用了大部分内容,但由于某种原因它没有做任何事情。 IOW,ProcessDOM() 永远不会被调用。 而且,我
TChromium 有没有办法在运行脚本后获取输出?例如,如果我在 Chrome 的开发者工具中运行以下脚本: document.getElementsByTagName('input') Chrom
我一直在寻找不同的方法来检查页面何时被 TChromium 组件完全加载 - 目前,没有成功。 我尝试使用延迟加载页面并发送有关完成的信息通过附加变量,但是OnLoadEnd事件是在JS等类似事件之前
我需要将 TChromium 组件静音以创建静音浏览器。主要问题是在 Windows XP 上,当我将浏览器的声音静音时,它会静音整个系统的声音。 有没有办法让 TChromium 组件静音? 最佳答
我是一名优秀的程序员,十分优秀!