diff --git a/js/jquery.mobile.navigation.js b/js/jquery.mobile.navigation.js index 25deee49..8f986c03 100755 --- a/js/jquery.mobile.navigation.js +++ b/js/jquery.mobile.navigation.js @@ -742,6 +742,18 @@ dupCachedPage = page; } + var mpc = settings.pageContainer, + pblEvent = new $.Event( "pagebeforeload" ), + triggerData = { url: url, absUrl: absUrl, dataUrl: dataUrl, deferred: deferred, options: settings }; + + // Let listeners know we're about to load a page. + mpc.trigger( pblEvent, triggerData ); + + // If the default behavior is prevented, stop here! + if( pblEvent.isDefaultPrevented() ){ + return deferred.promise(); + } + if ( settings.showLoadMsg ) { // This configurable timeout allows cached pages a brief delay to load without showing a message @@ -863,6 +875,12 @@ hideMsg(); } + // Add the page reference to our triggerData. + triggerData.page = page; + + // Let listeners know the page loaded successfully. + settings.pageContainer.trigger( "pageload", triggerData ); + deferred.resolve( absUrl, options, page, dupCachedPage ); }, error: function() { @@ -871,6 +889,19 @@ base.set( path.get() ); } + var plfEvent = new $.Event( "pageloadfailed" ); + + // Let listeners know the page load failed. + settings.pageContainer.trigger( plfEvent, triggerData ); + + // If the default behavior is prevented, stop here! + // Note that it is the responsibility of the listener/handler + // that called preventDefault(), to resolve/reject the + // deferred object within the triggerData. + if( plfEvent.isDefaultPrevented() ){ + return; + } + // Remove loading message. if ( settings.showLoadMsg ) {