Skip to content

Instantly share code, notes, and snippets.

@paulrichards19
Forked from benvinegar/subdomain.js
Created January 9, 2012 11:02
Show Gist options
  • Save paulrichards19/1582505 to your computer and use it in GitHub Desktop.
Save paulrichards19/1582505 to your computer and use it in GitHub Desktop.
Subdomain tunneling with jQuery and document.domain
/**
* Replace $.ajax on your subdomain with a copy taken
* from your base domain. All jQuery AJAX actions go
* through $.ajax (i.e. $.get, $.post), so it's all good.
*/
(function() {
var iframe,
onload,
queue = [];
// This has to be set both here and in iframe.html
document.domain = 'example.com';
// Back up this page's copy of $.ajax
window.$._ajax = window.$.ajax;
// We'll first replace $.ajax with a thin wrapper that both
// loads our iframe tunnel and saves invocations until the
// iframe is ready
$.ajax = function(params) {
if (!iframe) {
// tunnel.html should be a bare bones html page that
// includes a copy of jQuery, and sets document.domain
// to 'example.com'
iframe = $('<iframe>')
.attr('src', 'http://example.com/tunnel.html')
.load(onload)
.appendTo('head')[0];
}
// Save calls to $.ajax, execute when we're ready
queue.push(params);
};
function onload() {
// Our prize: a version of $.ajax that can communicate safely
// with our base domain
window.$.ajax = iframe.contentWindow.jQuery.ajax;
// Flush queued $.ajax calls
$.each(queue, function(_, params) {
$.ajax(params);
});
queue = null;
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment