diff options
author | Oleg <markelog@gmail.com> | 2012-10-21 22:17:46 +0400 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2012-10-21 20:14:05 -0400 |
commit | 696c553053c24909dfc8feddff7b73d18f5abb2a (patch) | |
tree | 1c11a6a92cdd5304a2c82836d7dd8bb26de2d1db /test/unit | |
parent | 2decd0510d8bd70fe7bbae9ebbacc49717376cfd (diff) | |
download | jquery-696c553053c24909dfc8feddff7b73d18f5abb2a.tar.gz jquery-696c553053c24909dfc8feddff7b73d18f5abb2a.zip |
Fix failing tests for beforeunload in Safari 5.0. Close gh-1002.
Diffstat (limited to 'test/unit')
-rw-r--r-- | test/unit/event.js | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/test/unit/event.js b/test/unit/event.js index 727e20ac2..1c95aff38 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -1372,20 +1372,30 @@ test("Submit event can be stopped (#11049)", function() { // Test beforeunload event only if it supported (i.e. not Opera) if ( window.onbeforeunload === null ) { asyncTest("on(beforeunload)", 4, function() { - var doc, + var win, forIE6 = 0, + fired = false, iframe = jQuery("<iframe src='data/iframe.html' />"); iframe.appendTo("#qunit-fixture").one( "load", function() { - doc = iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument; + win = this.contentWindow || this.contentDocument; - jQuery( doc ).on( "beforeunload", function() { + jQuery( win ).on( "beforeunload", function() { + fired = true; ok( true, "beforeunload event is fired" ); }); - strictEqual( doc.onbeforeunload, null, "onbeforeunload property on window object still equals null" ); + strictEqual( win.onbeforeunload, null, "onbeforeunload property on window object still equals null" ); - jQuery( doc ).on( "beforeunload", function() { + // In old Safari beforeunload event will not fire on iframes + jQuery( win ).on( "unload", function() { + if ( !fired ) { + ok( true, "This is suppose to be true only in old Safari" ); + checker(); + } + }); + + jQuery( win ).on( "beforeunload", function() { // On iframe in IE6 beforeunload event will not fire if event is binded through window object, // nevertheless, test should continue @@ -1396,7 +1406,7 @@ if ( window.onbeforeunload === null ) { }); }); - doc.onbeforeunload = function() { + win.onbeforeunload = function() { if ( !forIE6 ) { forIE6++; checker(); @@ -1408,21 +1418,27 @@ if ( window.onbeforeunload === null ) { iframe = jQuery("<iframe src='data/iframe.html' />"); iframe.appendTo("#qunit-fixture").one( "load", function() { - doc = iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument; + win = iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument; - jQuery( doc ).on( "beforeunload", function() { - strictEqual( doc.onbeforeunload, null, "Event handler is fired, even when onbeforeunload property on window is nulled" ); + jQuery( win ).on( "beforeunload", function() { + strictEqual( win.onbeforeunload, null, "Event handler is fired, even when onbeforeunload property on window is nulled" ); start(); }); - doc.onbeforeunload = null; + jQuery( win ).on( "unload", function() { + if ( !fired ) { + jQuery( win ).trigger("beforeunload"); + } + }) + + win.onbeforeunload = null; - doc.location.reload(); + win.location.reload(); }); } - doc.location.reload(); + win.location.reload(); }); }); } |