無論如何。我不得不深入一點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都會拒絕這個標題。 然後我使用基於閃存的解決方案。我使用了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插件,它可以很好地工作。
此外,我想做一些檢測機制,如果沒有Flash插件,只需要一個本地xhr,並希望瀏覽器支持跨域請求頭。
是的,順便說一句,'document.domain'只是爲了一個美麗! – Oybek