CEF 添加F5刷新快捷鍵


Keyboardcodes:https://www.androidos.net.cn/android/4.3_r1/xref/external/webkit/Source/WebCore/platform/chromium/KeyboardCodes.h

1.首先要讓我們自己的CefClient這個類公有繼承CefKeyboardHandler

   

2.添加鍵盤事件構造函數

virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() OVERRIDE{
        return this;
    }

 

3.然后重寫父類的OnPreKeyEvent和OnKeyEvent兩個方法

在.h文件中添加函數聲名

virtual bool OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
        const CefKeyEvent& event,
        CefEventHandle os_event,
        bool* is_keyboard_shortcut) ;
    
virtual bool OnKeyEvent(CefRefPtr<CefBrowser> browser,
        const CefKeyEvent& event,
        CefEventHandle os_event) ;

在.cpp中重寫函數

F5和小寫t的ASCLL碼都是116,如果不做處理,按F5和t都能實現刷新功能,這是我們不想看到的。

1.通過調試時發現,按F5的時候event的type是KEYEVENT_RAWKEYDOWN,windows_key_code 是116;

2.按鍵盤t的時候OnPreKeyEvent會響應兩次,第一次event的type是KEYEVENT_RAWKEYDOWN,windows_key_code是84(大寫T的ASCII碼是84),第二次event的type是KEYEVENT_CHAR,windows_key_code是116(小寫t的ASCII碼是116,因為沒有判斷按鍵類型導致F5和小寫t同時都能刷新),因此通過event中的type判斷一下,實現完美的刷新功能,在此感謝一下博友@uuuuY

調試過程:

1.按F5

2.按鍵盤“T”

第一次響應

第二次響應

 

方法一、

bool CCefBrowserEventHandler::OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
    const CefKeyEvent& event,
    CefEventHandle os_event,
    bool* is_keyboard_shortcut)
{
    if (event.type != KEYEVENT_CHAR)
    {
        if (event.windows_key_code == VK_F5)//F5刷新
        {
            browser->Reload();
//browser->ReloadIgnoreCache();//重新加載當前頁面,忽略任何緩存的數據 } }
return false; } bool CCefBrowserEventHandler::OnKeyEvent(CefRefPtr<CefBrowser> browser, const CefKeyEvent& event, CefEventHandle os_event) { return false; }

方法二、

bool CCefBrowserEventHandler::OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
    const CefKeyEvent& event,
    CefEventHandle os_event,
    bool* is_keyboard_shortcut)
{
    if (event.type == KEYEVENT_RAWKEYDOWN)
    {
        if (event.windows_key_code == VK_F5)//F5刷新
        {
            browser->Reload();
            //browser->ReloadIgnoreCache();//重新加載當前頁面,忽略任何緩存的數據。
        }
    }
    

    return false;
}

bool CCefBrowserEventHandler::OnKeyEvent(CefRefPtr<CefBrowser> browser,
    const CefKeyEvent& event,
    CefEventHandle os_event)
{
    return false;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM