@@ -69,7 +69,8 @@ export class CRPage implements PageDelegate {
69
69
this . _firstNonInitialNavigationCommittedPromise = new Promise ( f => this . _firstNonInitialNavigationCommittedCallback = f ) ;
70
70
}
71
71
72
- async initialize ( hasInitialAboutBlank : boolean ) {
72
+ async initialize ( ) {
73
+ let lifecycleEventsEnabled : Promise < any > ;
73
74
const promises : Promise < any > [ ] = [
74
75
this . _client . send ( 'Page.enable' ) ,
75
76
this . _client . send ( 'Page.getFrameTree' ) . then ( ( { frameTree} ) => {
@@ -84,7 +85,6 @@ export class CRPage implements PageDelegate {
84
85
helper . addEventListener ( this . _client , 'Page.frameRequestedNavigation' , event => this . _onFrameRequestedNavigation ( event ) ) ,
85
86
helper . addEventListener ( this . _client , 'Page.frameStoppedLoading' , event => this . _onFrameStoppedLoading ( event . frameId ) ) ,
86
87
helper . addEventListener ( this . _client , 'Page.javascriptDialogOpening' , event => this . _onDialog ( event ) ) ,
87
- helper . addEventListener ( this . _client , 'Page.lifecycleEvent' , event => this . _onLifecycleEvent ( event ) ) ,
88
88
helper . addEventListener ( this . _client , 'Page.navigatedWithinDocument' , event => this . _onFrameNavigatedWithinDocument ( event . frameId , event . url ) ) ,
89
89
helper . addEventListener ( this . _client , 'Runtime.bindingCalled' , event => this . _onBindingCalled ( event ) ) ,
90
90
helper . addEventListener ( this . _client , 'Runtime.consoleAPICalled' , event => this . _onConsoleAPI ( event ) ) ,
@@ -105,9 +105,21 @@ export class CRPage implements PageDelegate {
105
105
for ( const binding of this . _browserContext . _pageBindings . values ( ) )
106
106
frame . evaluate ( binding . source ) . catch ( debugError ) ;
107
107
}
108
+ const isInitialEmptyPage = this . _page . mainFrame ( ) . url ( ) === ':' ;
109
+ if ( isInitialEmptyPage ) {
110
+ // Ignore lifecycle events for the initial empty page. It is never the final page
111
+ // hence we are going to get more lifecycle updates after the actual navigation has
112
+ // started (even if the target url is about:blank).
113
+ lifecycleEventsEnabled . then ( ( ) => {
114
+ this . _eventListeners . push ( helper . addEventListener ( this . _client , 'Page.lifecycleEvent' , event => this . _onLifecycleEvent ( event ) ) ) ;
115
+ } ) ;
116
+ } else {
117
+ this . _firstNonInitialNavigationCommittedCallback ( ) ;
118
+ this . _eventListeners . push ( helper . addEventListener ( this . _client , 'Page.lifecycleEvent' , event => this . _onLifecycleEvent ( event ) ) ) ;
119
+ }
108
120
} ) ,
109
121
this . _client . send ( 'Log.enable' , { } ) ,
110
- this . _client . send ( 'Page.setLifecycleEventsEnabled' , { enabled : true } ) ,
122
+ lifecycleEventsEnabled = this . _client . send ( 'Page.setLifecycleEventsEnabled' , { enabled : true } ) ,
111
123
this . _client . send ( 'Runtime.enable' , { } ) ,
112
124
this . _client . send ( 'Page.addScriptToEvaluateOnNewDocument' , {
113
125
source : `//# sourceURL=${ EVALUATION_SCRIPT_URL } ` ,
@@ -145,8 +157,7 @@ export class CRPage implements PageDelegate {
145
157
for ( const source of this . _browserContext . _evaluateOnNewDocumentSources )
146
158
promises . push ( this . evaluateOnNewDocument ( source ) ) ;
147
159
promises . push ( this . _client . send ( 'Runtime.runIfWaitingForDebugger' ) ) ;
148
- if ( hasInitialAboutBlank )
149
- promises . push ( this . _firstNonInitialNavigationCommittedPromise ) ;
160
+ promises . push ( this . _firstNonInitialNavigationCommittedPromise ) ;
150
161
await Promise . all ( promises ) ;
151
162
}
152
163
0 commit comments