Skip to content

Commit 21557ff

Browse files
committed
Merge pull request jquery-archive#1993 from gseguin/issue-1990
Proposed fix for issue jquery-archive#1990
2 parents 30892ba + 2deeee1 commit 21557ff

File tree

1 file changed

+87
-83
lines changed

1 file changed

+87
-83
lines changed

js/jquery.mobile.navigation.js

Lines changed: 87 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -612,16 +612,19 @@
612612
$.mobile.showPageLoadingMsg();
613613
}
614614

615-
// Load the new page.
616-
$.ajax({
617-
url: fileUrl,
618-
type: settings.type,
619-
data: settings.data,
620-
dataType: "html",
621-
success: function( html ) {
622-
//pre-parse html to check for a data-url,
623-
//use it as the new fileUrl, base path, etc
624-
var all = $( "<div></div>" ),
615+
if ( !( $.mobile.allowCrossDomainPages || path.isSameDomain( documentUrl, absUrl ) ) ) {
616+
deferred.reject( absUrl, options );
617+
} else {
618+
// Load the new page.
619+
$.ajax({
620+
url: fileUrl,
621+
type: settings.type,
622+
data: settings.data,
623+
dataType: "html",
624+
success: function( html ) {
625+
//pre-parse html to check for a data-url,
626+
//use it as the new fileUrl, base path, etc
627+
var all = $( "<div></div>" ),
625628

626629
//page title regexp
627630
newPageTitle = html.match( /<title[^>]*>([^<]*)/ ) && RegExp.$1,
@@ -631,90 +634,91 @@
631634
dataUrlRegex = new RegExp( "\\bdata-" + $.mobile.ns + "url=[\"']?([^\"'>]*)[\"']?" );
632635

633636

634-
// data-url must be provided for the base tag so resource requests can be directed to the
635-
// correct url. loading into a temprorary element makes these requests immediately
636-
if( pageElemRegex.test( html )
637-
&& RegExp.$1
638-
&& dataUrlRegex.test( RegExp.$1 )
639-
&& RegExp.$1 ) {
640-
url = fileUrl = path.getFilePath( RegExp.$1 );
641-
}
637+
// data-url must be provided for the base tag so resource requests can be directed to the
638+
// correct url. loading into a temprorary element makes these requests immediately
639+
if( pageElemRegex.test( html )
640+
&& RegExp.$1
641+
&& dataUrlRegex.test( RegExp.$1 )
642+
&& RegExp.$1 ) {
643+
url = fileUrl = path.getFilePath( RegExp.$1 );
644+
}
642645

643-
if ( base ) {
644-
base.set( fileUrl );
645-
}
646+
if ( base ) {
647+
base.set( fileUrl );
648+
}
646649

647-
//workaround to allow scripts to execute when included in page divs
648-
all.get( 0 ).innerHTML = html;
649-
page = all.find( ":jqmData(role='page'), :jqmData(role='dialog')" ).first();
650+
//workaround to allow scripts to execute when included in page divs
651+
all.get( 0 ).innerHTML = html;
652+
page = all.find( ":jqmData(role='page'), :jqmData(role='dialog')" ).first();
650653

651-
if ( newPageTitle && !page.jqmData( "title" ) ) {
652-
page.jqmData( "title", newPageTitle );
653-
}
654+
if ( newPageTitle && !page.jqmData( "title" ) ) {
655+
page.jqmData( "title", newPageTitle );
656+
}
654657

655-
//rewrite src and href attrs to use a base url
656-
if( !$.support.dynamicBaseTag ) {
657-
var newPath = path.get( fileUrl );
658-
page.find( "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]" ).each(function() {
659-
var thisAttr = $( this ).is( '[href]' ) ? 'href' :
660-
$(this).is('[src]') ? 'src' : 'action',
661-
thisUrl = $( this ).attr( thisAttr );
662-
663-
// XXX_jblas: We need to fix this so that it removes the document
664-
// base URL, and then prepends with the new page URL.
665-
//if full path exists and is same, chop it - helps IE out
666-
thisUrl = thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' );
667-
668-
if( !/^(\w+:|#|\/)/.test( thisUrl ) ) {
669-
$( this ).attr( thisAttr, newPath + thisUrl );
670-
}
671-
});
672-
}
658+
//rewrite src and href attrs to use a base url
659+
if( !$.support.dynamicBaseTag ) {
660+
var newPath = path.get( fileUrl );
661+
page.find( "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]" ).each(function() {
662+
var thisAttr = $( this ).is( '[href]' ) ? 'href' :
663+
$(this).is('[src]') ? 'src' : 'action',
664+
thisUrl = $( this ).attr( thisAttr );
665+
666+
// XXX_jblas: We need to fix this so that it removes the document
667+
// base URL, and then prepends with the new page URL.
668+
//if full path exists and is same, chop it - helps IE out
669+
thisUrl = thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' );
670+
671+
if( !/^(\w+:|#|\/)/.test( thisUrl ) ) {
672+
$( this ).attr( thisAttr, newPath + thisUrl );
673+
}
674+
});
675+
}
673676

674-
//append to page and enhance
675-
page
676-
.attr( "data-" + $.mobile.ns + "url", path.convertUrlToDataUrl( fileUrl ) )
677-
.appendTo( settings.pageContainer );
677+
//append to page and enhance
678+
page
679+
.attr( "data-" + $.mobile.ns + "url", path.convertUrlToDataUrl( fileUrl ) )
680+
.appendTo( settings.pageContainer );
678681

679-
enhancePage( page, settings.role );
682+
enhancePage( page, settings.role );
680683

681-
// Enhancing the page may result in new dialogs/sub pages being inserted
682-
// into the DOM. If the original absUrl refers to a sub-page, that is the
683-
// real page we are interested in.
684-
if ( absUrl.indexOf( "&" + $.mobile.subPageUrlKey ) > -1 ) {
685-
page = settings.pageContainer.children( ":jqmData(url='" + dataUrl + "')" );
686-
}
684+
// Enhancing the page may result in new dialogs/sub pages being inserted
685+
// into the DOM. If the original absUrl refers to a sub-page, that is the
686+
// real page we are interested in.
687+
if ( absUrl.indexOf( "&" + $.mobile.subPageUrlKey ) > -1 ) {
688+
page = settings.pageContainer.children( ":jqmData(url='" + dataUrl + "')" );
689+
}
687690

688-
// Remove loading message.
689-
if ( settings.showLoadMsg ) {
690-
$.mobile.hidePageLoadingMsg();
691-
}
691+
// Remove loading message.
692+
if ( settings.showLoadMsg ) {
693+
$.mobile.hidePageLoadingMsg();
694+
}
692695

693-
deferred.resolve( absUrl, options, page, dupCachedPage );
694-
},
695-
error: function() {
696-
//set base back to current path
697-
if( base ) {
698-
base.set( path.get() );
699-
}
696+
deferred.resolve( absUrl, options, page, dupCachedPage );
697+
},
698+
error: function() {
699+
//set base back to current path
700+
if( base ) {
701+
base.set( path.get() );
702+
}
700703

701-
// Remove loading message.
702-
if ( settings.showLoadMsg ) {
703-
$.mobile.hidePageLoadingMsg();
704-
705-
//show error message
706-
$( "<div class='ui-loader ui-overlay-shadow ui-body-e ui-corner-all'><h1>"+ $.mobile.pageLoadErrorMessage +"</h1></div>" )
707-
.css({ "display": "block", "opacity": 0.96, "top": $window.scrollTop() + 100 })
708-
.appendTo( settings.pageContainer )
709-
.delay( 800 )
710-
.fadeOut( 400, function() {
711-
$( this ).remove();
712-
});
713-
}
704+
// Remove loading message.
705+
if ( settings.showLoadMsg ) {
706+
$.mobile.hidePageLoadingMsg();
707+
708+
//show error message
709+
$( "<div class='ui-loader ui-overlay-shadow ui-body-e ui-corner-all'><h1>"+ $.mobile.pageLoadErrorMessage +"</h1></div>" )
710+
.css({ "display": "block", "opacity": 0.96, "top": $window.scrollTop() + 100 })
711+
.appendTo( settings.pageContainer )
712+
.delay( 800 )
713+
.fadeOut( 400, function() {
714+
$( this ).remove();
715+
});
716+
}
714717

715-
deferred.reject( absUrl, options );
716-
}
717-
});
718+
deferred.reject( absUrl, options );
719+
}
720+
});
721+
}
718722

719723
return deferred.promise();
720724
};

0 commit comments

Comments
 (0)