當輸入的網頁連接傳送給
LoadURL
函數之后,還需要處理很多內容,其實這是由類
NavigationController
來管理的,
NavigationController
類主要就是管理加載網頁、退回、前進等等控制。
#001
?
void NavigationController::LoadURL(const GURL& url,
#002
????????????????????????????????????
PageTransition::Type transition) {
#003
???
// The user initiated a load, we don't need to reload anymore.
#004
???
needs_reload_ = false;
#005
?
#006
???
NavigationEntry* entry = CreateNavigationEntry(url, transition);
#007
?
#008
???
LoadEntry(entry);
#009
?
}
這個函數的第一個參數
url
是網絡連接地址,第二個參數
transition
是傳送的類型。
第
4
行代碼里設置不是重新加載。
第
6
行里創建了一個處理網頁瀏覽的入口對象,它是由類
NavigationEntry
管理。
第
8
行里就調用函數
LoadEntry
來加載網頁。
LoadEntry
函數更進一步去加載網頁的內容,它的代碼如下:
#001
?
void NavigationController::LoadEntry(NavigationEntry* entry) {
#002
???
// When navigating to a new page, we don't know for sure if we will actually
#003
???
// end up leaving the current page.
?
The new page load could for example
#004
???
// result in a download or a 'no content' response (e.g., a mailto: URL).
#005
?
#006
???
// TODO(pkasting): http://b/1113085 Should this use DiscardPendingEntry()?
清除內部變量。
#007
???
DiscardPendingEntryInternal();
保存當前的入口對象。
#008
???
pending_entry_ = entry;
通知服務器有一個瀏覽器對象加入。
#009
???
NotificationService::current()->Notify(
#010
???????
NOTIFY_NAV_ENTRY_PENDING,
#011
???????
Source<NavigationController>(this),
#012
???????
NotificationService::NoDetails());
下面開始進入加載網頁的動作。
#013
???
NavigateToPendingEntry(false);
#014
?
}
第
9
行里的類
NotificationService
是使用
OBSERVER
的設計模式來實現一對多的顯示關系。這個設計模式也是跟
MVC
與生具來的,顯然設計這個瀏覽器代碼的人,已經是對設計模式是專家式的人物了。
第
13
行里調用函數
NavigateToPendingEntry
,下一次再來分析它的功能。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
