diff options
-rw-r--r-- | test/data/event/onbeforeunload.html | 11 | ||||
-rw-r--r-- | test/unit/event.js | 19 |
2 files changed, 20 insertions, 10 deletions
diff --git a/test/data/event/onbeforeunload.html b/test/data/event/onbeforeunload.html index 11ad1964a..30053967a 100644 --- a/test/data/event/onbeforeunload.html +++ b/test/data/event/onbeforeunload.html @@ -4,17 +4,18 @@ <script> function report( event ) { var payload = { + source: "jQuery onbeforeunload iframe test", event: event.type }; - return parent.postMessage( JSON.stringify(payload), "*" ); + return parent.postMessage( JSON.stringify( payload ), "*" ); } jQuery( window ).on( "beforeunload", function( event ) { report( event ); - }).on( "load", function( event ) { - setTimeout(function() { + } ).on( "load", function( event ) { + setTimeout( function() { window.location.reload(); - }, 50); - }); + }, 50 ); + } ); </script> </html> diff --git a/test/unit/event.js b/test/unit/event.js index 38a805b37..ac309d22d 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -1448,13 +1448,22 @@ QUnit[ /(ipad|iphone|ipod)/i.test( navigator.userAgent ) ? "skip" : "test" ]( var done = assert.async(); window.onmessage = function( event ) { - var payload = JSON.parse( event.data ); + try { + var payload = JSON.parse( event.data ); - assert.ok( payload.event, "beforeunload", "beforeunload event" ); + // Ignore unrelated messages + if ( payload.source === "jQuery onbeforeunload iframe test" ) { + assert.ok( payload.event, "beforeunload", "beforeunload event" ); - iframe.remove(); - window.onmessage = null; - done(); + iframe.remove(); + window.onmessage = null; + done(); + } + } catch ( e ) { + + // Messages may come from other sources, like browser extensions; + // some may not be valid JSONs and thus cannot be `JSON.parse`d. + } }; iframe.appendTo( "#qunit-fixture" ); |