以查詢歷史記錄為例:
1.在上層history.js中通過chrome.send()來向底層發送事件請求和相關參數,其中'queryHistory'為信號名稱,[this.searchText_, this.offset_, this.rangeInDays_, endTime, maxResults]為向底層傳遞的參數:
chrome.send('queryHistory',[this.searchText_, this.offset_, this.rangeInDays_, endTime, maxResults]);
2.在底層Browsing_history_handler.cc中通過RegisterMessages函數對上層發來的事件進行響應處理:
void BrowsingHistoryHandler::RegisterMessages() { …… …… web_ui()->RegisterMessageCallback("queryHistory", base::Bind(&BrowsingHistoryHandler::HandleQueryHistory, base::Unretained(this))); …… }
之后會在BrowsingHistoryHandler::HandleQueryHistory()函數中處理查詢歷史記錄的事件響應。
3.處理完畢后,通過CallJavascriptFunction()調用上層js的方法並將需要返回的數據一並返回。
void BrowsingHistoryHandler::ReturnResultsToFrontEnd() { …… …… web_ui()->CallJavascriptFunction( "historyResult", results_info_value_, results_value); …… }
4.之后上層指定的方法,即historyResult()即獲得了最初指定查詢的歷史記錄,並可繼續做相關處理,以上完成一個完整的通信:
function historyResult(info, results) { historyModel.addResults(info, results); }
附:
拉取代碼:git clone
強制恢復到某次提交的版本:git reset --hard
可參考:
http://blog.gclxry.com/chromium-webui/