2017-08-16 60 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