This repository was archived by the owner on Mar 13, 2018. It is now read-only.
File tree 3 files changed +42
-3
lines changed
3 files changed +42
-3
lines changed Original file line number Diff line number Diff line change 237
237
}
238
238
}
239
239
240
+
241
+ function isLoadLikeEvent ( event ) {
242
+ switch ( event . type ) {
243
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#events-and-the-window-object
244
+ case 'load' :
245
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#unloading-documents
246
+ case 'beforeunload' :
247
+ case 'unload' :
248
+ return true ;
249
+ }
250
+ return false ;
251
+ }
252
+
240
253
function dispatchEvent ( event , originalWrapperTarget ) {
241
254
if ( currentlyDispatchingEvents . get ( event ) )
242
255
throw new Error ( 'InvalidStateError' ) ;
254
267
// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#the-end
255
268
var overrideTarget ;
256
269
var win ;
257
- var type = event . type ;
258
270
259
271
// Should really be not cancelable too but since Firefox has a bug there
260
272
// we skip that check.
261
273
// https://bugzilla.mozilla.org/show_bug.cgi?id=999456
262
- if ( type === 'load' && ! event . bubbles ) {
274
+ if ( isLoadLikeEvent ( event ) && ! event . bubbles ) {
263
275
var doc = originalWrapperTarget ;
264
276
if ( doc instanceof wrappers . Document && ( win = doc . defaultView ) ) {
265
277
overrideTarget = doc ;
274
286
} else {
275
287
eventPath = getEventPath ( originalWrapperTarget , event ) ;
276
288
277
- if ( event . type !== 'load' ) {
289
+ if ( ! isLoadLikeEvent ( event ) ) {
278
290
var doc = eventPath [ eventPath . length - 1 ] ;
279
291
if ( doc instanceof wrappers . Document )
280
292
win = doc . defaultView ;
Original file line number Diff line number Diff line change
1
+ <!DOCTYPE html>
2
+ < script src ="../../../tools/test/chai/chai.js "> </ script >
3
+ < script src ="../../../tools/test/htmltest.js "> </ script >
4
+ < script src ="../../shadowdom.js "> </ script >
5
+ < script >
6
+
7
+ var assert = chai . assert ;
8
+ var doc = ShadowDOMPolyfill . wrap ( document ) ;
9
+
10
+ var beforeunloadCalled = 0 ;
11
+ window . addEventListener ( 'beforeunload' , function ( e ) {
12
+ assert . equal ( e . target , doc ) ;
13
+ beforeunloadCalled ++ ;
14
+ } ) ;
15
+
16
+ window . addEventListener ( 'unload' , function ( e ) {
17
+ assert . equal ( beforeunloadCalled , 1 ) ;
18
+ assert . equal ( e . target , doc ) ;
19
+ done ( ) ;
20
+ } ) ;
21
+
22
+ window . addEventListener ( 'load' , function ( e ) {
23
+ window . location . href = 'about:blank' ;
24
+ } ) ;
25
+
26
+ </ script >
Original file line number Diff line number Diff line change @@ -928,6 +928,7 @@ test('retarget order (multiple shadow roots)', function() {
928
928
} ) ;
929
929
930
930
htmlTest ( 'html/on-load-test.html' ) ;
931
+ htmlTest ( 'html/on-unload-test.html' ) ;
931
932
932
933
test ( 'event wrap round trip' , function ( ) {
933
934
var e = new Event ( 'x' ) ;
You can’t perform that action at this time.
0 commit comments