Make crossdomain ajax requests in crossdomain.php

This commit is contained in:
Cathy J. Fitzpatrick
2013-04-06 04:36:08 -06:00
parent 11c931efa9
commit 3d5f2a1a8b
2 changed files with 63 additions and 35 deletions

View File

@@ -36,6 +36,9 @@ $sid = isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '';
<script>
(function() {
var origin = <?php echo json_encode($origin) ?>;
var postMessage = function(message) {
return window.parent.postMessage($.toJSON(message), origin);
};
$(window).on('message', function($e) {
var e = $e.originalEvent;
if (e.origin !== origin) return;
@@ -43,8 +46,15 @@ $sid = isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '';
if (data.username) {
$.cookie('showdown_username', data.username, {expires: 14});
}
if (data.sid) {
$.cookie('sid', data.sid, {expires: 14});
if (data.get) {
$.get(data.get[0], function(ajaxdata) {
postMessage({ajax: [data.get[1], ajaxdata]});
}, data.get[2]);
}
if (data.post) {
$.post(data.post[0], data.post[1], function(ajaxdata) {
postMessage({ajax: [data.post[2], ajaxdata]});
}, data.post[3]);
}
if (data.teams) {
localStorage.setItem('showdown_teams', data.teams);
@@ -62,6 +72,6 @@ $sid = isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '';
message.teams = localStorage.getItem('showdown_teams');
message.prefs = localStorage.getItem('showdown_prefs');
}
window.parent.postMessage($.toJSON(message), origin);
postMessage(message);
})();
</script>

View File

@@ -3289,9 +3289,7 @@ function overlaySubmit(e, overlayType) {
error: data.actionerror
});
}
}), 'text').error(function (e) {
alert('error: ' + e);
});
}), 'text');
overlayClose();
break;
case 'forfeit':
@@ -3570,36 +3568,56 @@ teams = (function() {
connect(Config.upkeep, $.cookie('showdown_username') || '');
} else {
var origin = 'http://play.pokemonshowdown.com';
$(window).on('message', function($e) {
var e = $e.originalEvent;
if (e.origin !== origin) return;
var data = $.parseJSON(e.data);
Tools.postCrossDomainMessage = function(data) {
return e.source.postMessage($.toJSON(data), origin);
$(window).on('message', (function() {
var callbacks = [];
return function($e) {
var e = $e.originalEvent;
if (e.origin !== origin) return;
var data = $.parseJSON(e.data);
if (data.upkeep) {
Tools.postCrossDomainMessage = function(data) {
return e.source.postMessage($.toJSON(data), origin);
};
// ajax requests
$.get = function(uri, callback, type) {
var idx = callbacks.length;
callbacks[idx] = callback;
Tools.postCrossDomainMessage({get: [uri, idx, type]});
};
$.post = function(uri, data, callback, type) {
var idx = callbacks.length;
callbacks[idx] = callback;
Tools.postCrossDomainMessage({post: [uri, data, idx, type]});
};
// teams
if (data.teams) {
cookieTeams = false;
teams = $.parseJSON(data.teams);
}
Teambuilder.writeTeams = function() {
Tools.postCrossDomainMessage({teams: $.toJSON(teams)});
};
if (rooms.teambuilder) {
rooms.teambuilder.init();
}
// prefs
if (data.prefs) {
Tools.prefs.data = $.parseJSON(data.prefs);
}
Tools.prefs.save = function() {
Tools.postCrossDomainMessage({prefs: $.toJSON(this.data)});
};
// connect
connect(data.upkeep, data.username);
} else if (data.ajax) {
var idx = data.ajax[0];
if (callbacks[idx]) {
callbacks[idx](data.ajax[1]);
delete callbacks[idx];
}
}
};
// sid
$.cookie('sid', data.sid);
// teams
if (data.teams) {
cookieTeams = false;
teams = $.parseJSON(data.teams);
}
Teambuilder.writeTeams = function() {
Tools.postCrossDomainMessage({teams: $.toJSON(teams)});
};
if (rooms.teambuilder) {
rooms.teambuilder.init();
}
// prefs
if (data.prefs) {
Tools.prefs.data = $.parseJSON(data.prefs);
}
Tools.prefs.save = function() {
Tools.postCrossDomainMessage({prefs: $.toJSON(this.data)});
};
// connect
connect(data.upkeep, data.username);
});
})());
var $iframe = $(
'<iframe src="//play.pokemonshowdown.com/crossdomain.php?prefix=' +
encodeURIComponent(Config.crossdomain.prefix) +