JQuery 1.4.2スクリプトを使用するiframeがあります。同じiframeがhttp
とhttps
サイトの両方に挿入されます。 jQueryスクリプトは、相対パス(たとえば、/ scripts/jquery-1.4.2.min.js)としてメインHTMLファイルに含まれています。
AJAX呼び出しが行われると、Internet Explorerはアクセスを拒否します。AJAXは別のサブドメインを呼び出していますが、正しいプロトコルを使用しています。他のすべてのブラウザーは動作しますが、 Internet Explorerには次のエラーが表示されます。
SCRIPT5:アクセスが拒否されました。
jquery-1.4.2.min.js、行127文字344
このエラーはクロスドメインAJAX呼び出しからのものだと聞きました。しかし、なぜIEが唯一のくだらないものですか?IEソリューション?
また、これは私のAJAXです:
$.ajax({
url: thisURL,
dataType: "json",
data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
success: function(ret){
callback(ret)
}
});
IEでは、クロスサイトでXHRの代わりにXDomainRequestを使用する必要があります。次のようなものを試すことができます。
if ($.browser.msie && window.XDomainRequest) {
// Use Microsoft XDR
var xdr = new XDomainRequest();
xdr.open("get", url);
xdr.onload = function() {
// XDomainRequest doesn't provide responseXml, so if you need it:
var dom = new ActiveXObject("Microsoft.XMLDOM");
dom.async = false;
dom.loadXML(xdr.responseText);
};
xdr.send();
} else {
// your ajax request here
$$.ajax({
url: thisURL,
dataType: "json",
data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
success: function(ret){
callback(ret)
}
});
}
参照
http://forum.jquery.com/topic/cross-domain-ajax-and-ie
シナリオに合うかどうかわからない
xdr = new XDomainRequest();
xdr.onload=function()
{
alert(xdr.responseText);
}
xdr.open("GET", thisUrl); //thisURl ->your cross domain request URL
//pass your data here
xdr.send([data]);
さらに詳しいガイダンスがあります こちら
これは私にとって問題をうまく解決しました:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
JQueryの後、スクリプトの前にインストール/コンパイルし、通常どおり$ .ajaxメソッドを使用すると、残りは自動的に処理されます。
最新のJQuery(> jquery-1.8.0)を使用しようとしましたか?バージョン1.8.0以降、彼らはIE9のいくつかのバグを解決しました。おそらくこれも。
JQueryをバージョン1.10.1から1.10.2に変更したところ、この問題は解決したようです。
私は同様の問題を抱えており、私にとっての解決策はjsonの代わりにjsonpを使用することでした。そうすれば、IEのカスタマーバージョンを作成する必要はありませんでした。
これを行うことができるのは、jsonサーバーホストがコールバックリクエスト変数をサポートしているか、サーバーにアクセスしてサポートを追加できる場合のみです。プロセスを理解するのに役立つページを次に示します。その.net mvcに焦点を当てていますが、jsonとjsonpの違いを十分に把握できます。
http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx
アクセスしているドメインを確認します。応答ヘッダーがそこにあるはずです
"Access-Control-Allow-Methods" : "POST, GET, OPTIONS"
"Access-Control-Allow-Origin" : "http://www.mydomain.com" or "*"
他のドメインはスクリプトリクエストを許可する必要があります。応答に追加するもう1つのヘッダーはP3Pヘッダーです。
"p3p" : "CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
それはあなたを助けるはずです。
私は同様の問題に直面していました。私はファイルアップロードコントロールを使用していましたが、隠されていて、ファイルアップロードとajaxの方法でファイルをアップロードするイベントを制御しようとしている別の要素がありました
ファイルアップロードコントロールを直接使用してみてください。私のアプリケーションでこれが解決した問題。
私はこのバグを取得します(したがって、ここでgoogleを取得します)が、理由は非常に異なっていました。したがって、クロスサイトがなくてもこのアクセス拒否エラーが表示される場合:value sent
次のような悪い表現を持つ変数の1つに影響するとします。
urlVar = $("theID").val // without () this was the error!
[...] ajax呼び出し:
data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
Google/FFではこれに問題はありません(受信サーバー側を確認してください...)しかし、IEこれを送信することを拒否してください!
「callback =?」を追加するだけです次のようなajax URLリクエストで: http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html
MSは業界の推奨事項を採用するのではなく、独自の方法を見つけているようです。私はここで解決策を見つけました:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.js