WebKit事件派發

2021-06-05 20:55:20 字數 1420 閱讀 7619

一般在乙個網路應用系統中,都會一下幾類事件: 網路事件, timer事件,以及裝置事件,裝置事件主要指滑鼠,按鍵,以及paint等訊息事件

webkit也不例外,小弟分析了一下32平台的實現,也無特殊之處

1. 裝置事件

裝置事件仍然是通過win32平台的訊息迴圈來派發,訊息處理函式如下:

+ expand source

view plain

copy to clipboard

print?

在32平台,webview僅僅需要實現訊息處理函式,然後建立視窗,將其訊息處理函式註冊給目的視窗

2. 網路事件

32平台是用的curl網路庫,通過呼叫網路庫的非同步函式, webkit引擎與網路庫的介面是resoucehandler,發起網路請求,需要呼叫resoucehandle::start(networkingcontext* context),函式當網路事件到達,會呼叫如下函式:

view plain

copy to clipboard

print?

void didreceivedata(cfurlconnectionref conn, cfdataref data, cfindex originallength, const

void* clientinfo)     

3.timer事件

timer事件的處理類似於裝置事件,timer的平台初始化函式:

view plain

copy to clipboard

print?

static

void initializeoffscreentimerwindow()    

timer的訊息處理函式如下:

view plain

copy to clipboard

print?

lresult callback timerwindowwndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)  

#endif

if (message == timerfiredmessage)  else

if (message == wm_timer)  else

if (wparam == endhighrestimerid)   

} else

return defwindowproc(hwnd, message, wparam, lparam);  

return 0;  

}  

引擎內部事件如何處理?

通過分析發現引擎內部的非同步是通過timer來實現,具體請參照前面講解timer的文章

通過上面的分析發現,webkit沒有將事件的處理統一起來,如果在引擎中自己有乙個事件的處理者,或者將以上事件的處理統一起來,其架構看起來會不會更加優美?

Lua事件派發器

author hugh datetime 2019 10 30 describe 可用於遊戲內部所有的ui事件廣播通知 框架自定義全域性類 cc.exports.eventmanager 事件集合 所有的廣播列舉事件在此註冊 名字,值不要重複 eventmanager.eventtype 觸發 fu...

popstate事件在webkit中的詭異行為

雖然官方的文件中對popstate的描述也沒有細節上的描述,不過以我的邏輯來判斷,這貨是就webkit的bug。html5的這一套historyapi和傳統的history不同,或者說這一套historyapi是 session history entries 雖然官方的文件並沒有強調它與傳統的hi...

as3自定義事件和派發

自定義事件無法擁有as3系統事件的觸發效果,如單擊事件,滑鼠,鍵盤事件等,這些系統事件的派發是由編譯器生成建立和分發的 自定義事件只能由dispatchevent event 方法手動的分發。首先建立乙個自定義的事件類,繼承自事件的基類event類。package myform public ove...