From 5a5f67800b048ae274e644547f4b8e03156ffa49 Mon Sep 17 00:00:00 2001 From: jaubourg Date: Sun, 9 Jan 2011 16:50:13 +0100 Subject: [PATCH] Fixes #5955. Option crossDomain now forces ajax to consider a request as cross-domain even when it is not. Useful for when servers issue redirects to cross-domain urls. Unit test added. --- src/ajax.js | 15 +++++++++------ test/unit/ajax.js | 19 +++++++++++++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index e910aa5..eae20e4 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -520,12 +520,15 @@ jQuery.extend({ // Determine if a cross-domain request is in order var parts = rurl.exec( s.url.toLowerCase() ), loc = location; - s.crossDomain = !!( - parts && - ( parts[ 1 ] && parts[ 1 ] != loc.protocol || - parts[ 2 ] != loc.hostname || - ( parts[ 3 ] || 80 ) != ( loc.port || 80 ) ) - ); + + if ( ! s.crossDomain ) { + 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 if ( s.data && s.processData && typeof s.data != "string" ) { diff --git a/test/unit/ajax.js b/test/unit/ajax.js index 4c8c500..8bfd4d3 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -383,14 +383,15 @@ test(".ajax() - hash", function() { test("jQuery ajax - cross-domain detection", function() { - expect( 3 ); + expect( 4 ); var loc = document.location, otherPort = loc.port === 666 ? 667 : 666, otherProtocol = loc.protocol === "http:" ? "https:" : "http:", protocolFlag, hostFlag, - portFlag; + portFlag, + forcedFlag; if ( jQuery.ajax({ url: otherProtocol + "//" + loc.host, @@ -431,6 +432,20 @@ test("jQuery ajax - cross-domain detection", function() { } } + if ( jQuery.ajax({ + url: loc.protocol + "//" + loc.host, + crossDomain: true, + beforeSend: function( _ , s ) { + forcedFlag = 1; + ok( s.crossDomain , "Test forced crossDomain is detected as cross-domain" ); + return false; + } + }) === false ) { + if ( ! forcedFlag ) { + ok( ! jQuery.support.cors , "Test forced crossDomain is detected as cross-domain (no transport)" ); + } + } + }); test(".ajax() - 304", function() { -- 1.7.10.4