とにかく。 JSJaCライブラリを少し深く掘り下げてコードに注入しなければなりませんでした。しかし、まず私はいくつかの回避策を実行しました。基本的に私は、一般的に、これはネイティブXHRを使ってクロスドメイン要求を行うことができる応答
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, *
に以下のヘッダを追加しました。しかし、現代のブラウザだけで動作することが判明しました。例えば、IE8では動作しませんでしたが、Operaのどのバージョンでもこのヘッダを単に拒否しました。 その後、私はフラッシュベースのソリューションを使用しました。私は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を追加しました。ブラウザがフラッシュプラグインを持っている場合、これは完全に動作します。
さらに、フラッシュプラグインがない場合はネイティブxhrを作成し、ブラウザがクロスドメイン要求のヘッダーをサポートしていることを期待しています。
ところで、 'document.domain'はちょうど美しさです! – Oybek