Fixes #7465. Reworked the regexp and associated test for cross-domain detection so that it now includes ports. Added cross-domain detection tests for protocol, hostname and port.
This commit is contained in:
parent
d515068ee8
commit
afefb4f3d2
|
@ -10,7 +10,7 @@ var r20 = /%20/g,
|
||||||
rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
|
rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
|
||||||
rselectTextarea = /^(?:select|textarea)/i,
|
rselectTextarea = /^(?:select|textarea)/i,
|
||||||
rts = /([?&])_=[^&]*/,
|
rts = /([?&])_=[^&]*/,
|
||||||
rurl = /^(\w+:)?\/\/([^\/?#]+)/,
|
rurl = /^(\w+:)?\/\/([^\/?#:]+)(?::(\d+))?/,
|
||||||
|
|
||||||
// Slice function
|
// Slice function
|
||||||
sliceFunc = Array.prototype.slice,
|
sliceFunc = Array.prototype.slice,
|
||||||
|
@ -520,7 +520,12 @@ jQuery.extend({
|
||||||
// Determine if a cross-domain request is in order
|
// Determine if a cross-domain request is in order
|
||||||
var parts = rurl.exec( s.url.toLowerCase() ),
|
var parts = rurl.exec( s.url.toLowerCase() ),
|
||||||
loc = location;
|
loc = location;
|
||||||
s.crossDomain = !!( parts && ( parts[ 1 ] && parts[ 1 ] != loc.protocol || parts[ 2 ] != loc.host ) );
|
s.crossDomain = !!(
|
||||||
|
parts &&
|
||||||
|
( parts[ 1 ] && parts[ 1 ] != loc.protocol ||
|
||||||
|
parts[ 2 ] != loc.hostname ||
|
||||||
|
( parts[ 3 ] || 80 ) != ( loc.port || 80 ) )
|
||||||
|
);
|
||||||
|
|
||||||
// Convert data if not already a string
|
// Convert data if not already a string
|
||||||
if ( s.data && s.processData && typeof s.data != "string" ) {
|
if ( s.data && s.processData && typeof s.data != "string" ) {
|
||||||
|
|
|
@ -358,6 +358,58 @@ test(".ajax() - hash", function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("jQuery ajax - cross-domain detection", function() {
|
||||||
|
|
||||||
|
expect( 3 );
|
||||||
|
|
||||||
|
var loc = document.location,
|
||||||
|
otherPort = loc.port === 666 ? 667 : 666,
|
||||||
|
otherProtocol = loc.protocol === "http:" ? "https:" : "http:",
|
||||||
|
protocolFlag,
|
||||||
|
hostFlag,
|
||||||
|
portFlag;
|
||||||
|
|
||||||
|
if ( jQuery.ajax({
|
||||||
|
url: otherProtocol + "//" + loc.host,
|
||||||
|
beforeSend: function( _ , s ) {
|
||||||
|
protocolFlag = 1;
|
||||||
|
ok( s.crossDomain , "Test different protocols are detected as cross-domain" );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}) === false ) {
|
||||||
|
if ( ! protocolFlag ) {
|
||||||
|
ok( ! jQuery.support.cors , "Test different protocols are detected as cross-domain (no transport)" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( jQuery.ajax({
|
||||||
|
url: loc.protocol + '//somewebsitethatdoesnotexist-656329477541.com:' + ( loc.port || 80 ),
|
||||||
|
beforeSend: function( _ , s ) {
|
||||||
|
hostFlag = 1;
|
||||||
|
ok( s.crossDomain , "Test different hostnames are detected as cross-domain" );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}) === false ) {
|
||||||
|
if ( ! hostFlag ) {
|
||||||
|
ok( ! jQuery.support.cors , "Test different hostnames are detected as cross-domain (no transport)" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( jQuery.ajax({
|
||||||
|
url: loc.protocol + "//" + loc.hostname + ":" + otherPort,
|
||||||
|
beforeSend: function( _ , s ) {
|
||||||
|
portFlag = 1;
|
||||||
|
ok( s.crossDomain , "Test different ports are detected as cross-domain" );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}) === false ) {
|
||||||
|
if ( ! portFlag ) {
|
||||||
|
ok( ! jQuery.support.cors , "Test different ports are detected as cross-domain (no transport)" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
test(".ajax() - 304", function() {
|
test(".ajax() - 304", function() {
|
||||||
expect( 1 );
|
expect( 1 );
|
||||||
stop();
|
stop();
|
||||||
|
|
Loading…
Reference in a new issue