web-dev-qa-db-ja.com

IEでjQueryスクリプトへのアクセスが拒否されました

JQuery 1.4.2スクリプトを使用するiframeがあります。同じiframeがhttphttpsサイトの両方に挿入されます。 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)
     }
 });
46
Kyle

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]); 

さらに詳しいガイダンスがあります こちら

44
Rafay

これは私にとって問題をうまく解決しました:

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

JQueryの後、スクリプトの前にインストール/コンパイルし、通常どおり$ .ajaxメソッドを使用すると、残りは自動的に処理されます。

9
Kevin Leary

最新のJQuery(> jquery-1.8.0)を使用しようとしましたか?バージョン1.8.0以降、彼らはIE9のいくつかのバグを解決しました。おそらくこれも。

http://blog.jquery.com/2012/08/30/jquery-1-8-1-released/

4
matthieuR42

JQueryをバージョン1.10.1から1.10.2に変更したところ、この問題は解決したようです。

2
Trolloc

私は同様の問題を抱えており、私にとっての解決策はjsonの代わりにjsonpを使用することでした。そうすれば、IEのカスタマーバージョンを作成する必要はありませんでした。

これを行うことができるのは、jsonサーバーホストがコールバックリクエスト変数をサポートしているか、サーバーにアクセスしてサポートを追加できる場合のみです。プロセスを理解するのに役立つページを次に示します。その.net mvcに焦点を当てていますが、jsonとjsonpの違いを十分に把握できます。

http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx

2
James Becwar

アクセスしているドメインを確認します。応答ヘッダーがそこにあるはずです

"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"

それはあなたを助けるはずです。

2
Furqan Hameedi

私は同様の問題に直面していました。私はファイルアップロードコントロールを使用していましたが、隠されていて、ファイルアップロードとajaxの方法でファイルをアップロードするイベントを制御しようとしている別の要素がありました

ファイルアップロードコントロールを直接使用してみてください。私のアプリケーションでこれが解決した問題。

2
iCoder

私はこのバグを取得します(したがって、ここでgoogleを取得します)が、理由は非常に異なっていました。したがって、クロスサイトがなくてもこのアクセス拒否エラーが表示される場合:value sent
次のような悪い表現を持つ変数の1つに影響するとします。

urlVar = $("theID").val // without () this was the error!

[...] ajax呼び出し:

data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},

Google/FFではこれに問題はありません(受信サーバー側を確認してください...)しかし、IEこれを送信することを拒否してください!

2

「callback =?」を追加するだけです次のようなajax URLリクエストで: http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html

0
AzuraStar

MSは業界の推奨事項を採用するのではなく、独自の方法を見つけているようです。私はここで解決策を見つけました:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.js

0
Jez D