2017-08-16 56 views
1

我想跟踪用户在TChromium内做了多少点击。我不在乎他是否点击了“空白区域”/链接/按钮/图片等。我只想知道他点击了多少次。我希望TChromium有Onclick事件,但没有。我怎么知道用户点击?TChromium OnClick

+0

这又是一个文件。我会马上回来...... – Victoria

+0

我相信你需要勾住鼠标按钮。否则,我不明白为什么TChromium会关心如果你点击一个什么都不需要的地方。 – RBA

+0

@RBA,我担心你是对的,因为我认为你不会在JavaScript中使用Flash等容器收听点击。 – Victoria

回答

3

您可以添加事件侦听器。这里的问题是CEF3不支持像CEF1那样的DOM事件监听器,所以它不是那么容易的(尽管不是不可能)。在我尝试制作V8交互示例之前,一个非常肮脏的解决方法就是这样。您创建一个足够唯一的字符串,为整个文档添加一个事件侦听器,并且在这种情况下您使用该唯一字符串记录消息。而在Delphi中,你会等着,例如:

const 
    MyClickMessage = '08B52B44-748F-44BB-AC6C-5179D6C1F523'; 

procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; 
    const frame: ICefFrame; httpStatusCode: Integer); 
begin 
    if frame.IsMain then 
    frame.ExecuteJavaScript(
     'document.addEventListener("click", function(evnt){' + 
      'console.log("' + MyClickMessage + '");' + 
     '});', 
     '', 
     0); 
end; 

procedure TForm1.Chromium1ConsoleMessage(Sender: TObject; const browser: ICefBrowser; 
    const message, source: ustring; line: Integer; out Result: Boolean); 
begin 
    if message = MyClickMessage then 
    begin 
    Result := True; 
    ShowMessage('User clicked!'); 
    end; 
end; 

哈克独特日志消息,吧:)?我会尝试想出更好的东西(使用V8引擎)。

+0

当用户在非响应式(href,按钮,图像等)区域点击网页时,此功能是否可以正常工作? – RBA

+0

@RBA,应该。但在我的代码中,我仅将事件绑定到主框架,而不是防止冒泡。这不好。 – Victoria

+0

@RBA,如果你可以做JavaScript,我可以为你提供V8实现。我只是不知道如何为整个文档创建一个全局的钩子钩子(停止事件冒泡并保持原有的功能)。我不擅长JavaScript。 – Victoria