В любом случае. Мне пришлось немного углубиться в библиотеку JSJaC и сделать несколько уколов в код. Но сначала я сделал обходной путь. В основном я добавил следующие заголовки к ответу
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, *
Обычно это позволяет делать междоменные запросы с использованием нативного xhr. Однако это оказалось работать только в современных браузерах. Например, он не работал в IE8, и любая версия Opera просто отклоняла этот заголовок.
Тогда я использовал решение на основе flash. Я использовал flXHR и модифицировал jsjac.uncompressed.js, как это.
XmlHttp.create = function () {
// try {
// if (window.XMLHttpRequest) {
// var req = new XMLHttpRequest();
//
// // some versions of Moz do not support the readyState property
// // and the onreadystate event so we patch it!
// if (req.readyState == null) {
// req.readyState = 1;
// req.addEventListener("load", function () {
// req.readyState = 4;
// if (typeof req.onreadystatechange == "function")
// req.onreadystatechange();
// }, false);
// }
//
// return req;
// }
// if (window.ActiveXObject) {
// return new ActiveXObject(XmlHttp.getPrefix() + ".XmlHttp");
// }
// }
// catch (ex) {}
// // fell through
// throw new Error("Your browser does not support XmlHttp objects");
var AsyncClient = new flensed.flXHR({
"autoUpdatePlayer": true,
"instanceId": "myproxy" + _xhrpf.toString(),
// This is important because the library uses the response xml of the object to manipulate the data
"xmlResponseText": true,
"onreadystatechange": function () { }
});
// counter for giving a unique id for the flash xhr object.
_xhrpf++;
return AsyncClient;
};
var _xhrpf = 1;
Затем я просто добавил crossdomain.xml в корень целевого домена. Теперь он отлично работает, если в браузере есть плагин flash.
Далее я хочу создать какой-нибудь механизм обнаружения, если нет плагина для флеш-памяти, просто сделайте нативный xhr и надейтесь, что браузер поддерживает заголовки для междоменных запросов.