Доступ запрещен к скрипту jQuery в IE

у меня есть iframe, использующий скрипт jQuery 1.4.2. Один и тот же iframe вводится в оба http и https сайты. Сценарий jQuery включен в основной HTML-файл как относительный путь (например, /scripts / jquery-1.4.2.минута.в JS).

при вызове AJAX Internet Explorer запрещает доступ. AJAX вызывает другой поддомен, но использует правильный протокол. Все остальные браузеры работают, но Internet Explorer выдает следующую ошибку:

SCRIPT5: Доступ запрещен.
jquery-1.4.2.минута.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)
     }
 });

10 ответов


IE требует, чтобы вы использовали XDomainRequest вместо XHR для кросс-сайта, вы можете попробовать что-то вроде...

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. Возможно, и этот тоже.

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


У меня была аналогичная проблема, и решением для меня было использовать jsonp вместо json. Таким образом, мне не пришлось запускать версию клиента для 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 "*"

другой домен должен разрешить ваш запрос скрипта. Еще один заголовок, который будет добавлен в ваш ответ, - это заголовок P3P.

"p3p" : "CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"

это должно помочь вам.


Я столкнулся с аналогичной проблемой. Я использовал контроль загрузки файлов, но он был скрыт, и у меня был другой элемент, пытающийся контролировать загрузку файлов и события для загрузки файла в ajax way

попробуйте напрямую использовать элемент управления загрузкой файлов. эта проблема решена в моем приложении.


Я получаю эту ошибку (и, следовательно, google здесь), но причина была совсем другой. Поэтому, если у вас нет перекрестного сайта и вы все еще получаете эту ошибку отказа в доступе: дважды проверьте стоимостью отправлено
предположим, вы воздействуете на одну из переменных с плохим следующим выражением:

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

[...] ajax call:

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

Google / FF не имеют проблем с этим (проверьте, что такое серверная сторона приема...) Но IE отказывается отправлять это!


Я изменил свой JQuery с версии 1.10.1 to 1.10.2 и, похоже, он решил эту проблему для меня.


похоже, что MS находит свой собственный способ делать вещи, а не принимать отраслевые рекомендации. Я нашел here решение:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.js


просто добавьте ' callback=?'по вашему запросу ajax URL, как здесь: http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html