chrome源碼學習之:js與底層c++的通信


以查詢歷史記錄為例:

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/

 


免責聲明!

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



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