當(dāng)輸入的網(wǎng)頁連接傳送給
LoadURL
函數(shù)之后,還需要處理很多內(nèi)容,其實(shí)這是由類
NavigationController
來管理的,
NavigationController
類主要就是管理加載網(wǎng)頁、退回、前進(jìn)等等控制。
#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
?
}
這個(gè)函數(shù)的第一個(gè)參數(shù)
url
是網(wǎng)絡(luò)連接地址,第二個(gè)參數(shù)
transition
是傳送的類型。
第
4
行代碼里設(shè)置不是重新加載。
第
6
行里創(chuàng)建了一個(gè)處理網(wǎng)頁瀏覽的入口對(duì)象,它是由類
NavigationEntry
管理。
第
8
行里就調(diào)用函數(shù)
LoadEntry
來加載網(wǎng)頁。
LoadEntry
函數(shù)更進(jìn)一步去加載網(wǎng)頁的內(nèi)容,它的代碼如下:
#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()?
清除內(nèi)部變量。
#007
???
DiscardPendingEntryInternal();
保存當(dāng)前的入口對(duì)象。
#008
???
pending_entry_ = entry;
通知服務(wù)器有一個(gè)瀏覽器對(duì)象加入。
#009
???
NotificationService::current()->Notify(
#010
???????
NOTIFY_NAV_ENTRY_PENDING,
#011
???????
Source<NavigationController>(this),
#012
???????
NotificationService::NoDetails());
下面開始進(jìn)入加載網(wǎng)頁的動(dòng)作。
#013
???
NavigateToPendingEntry(false);
#014
?
}
第
9
行里的類
NotificationService
是使用
OBSERVER
的設(shè)計(jì)模式來實(shí)現(xiàn)一對(duì)多的顯示關(guān)系。這個(gè)設(shè)計(jì)模式也是跟
MVC
與生具來的,顯然設(shè)計(jì)這個(gè)瀏覽器代碼的人,已經(jīng)是對(duì)設(shè)計(jì)模式是專家式的人物了。
第
13
行里調(diào)用函數(shù)
NavigateToPendingEntry
,下一次再來分析它的功能。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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