Доступ запрещен к сценарию jQuery в IE - PullRequest
46 голосов
/ 23 февраля 2011

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

Когда выполняется вызов 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)
     }
 });

Ответы [ 10 ]

44 голосов
/ 23 февраля 2011

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

вы можете найти еще несколько указаний здесь

9 голосов
/ 22 августа 2013

Это изящно решило проблему для меня:

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

Просто установите / скомпилируйте после jQuery и перед вашим скриптом и используйте метод $ .ajax, как обычно, все остальное обрабатывается автоматически.

4 голосов
/ 10 января 2013

Вы пытались использовать последнюю версию JQuery (> jquery-1.8.0)?Начиная с версии 1.8.0, они решили некоторые ошибки IE9.Возможно, это тоже.

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

2 голосов
/ 24 ноября 2015

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

2 голосов
/ 25 августа 2013

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

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

[...] ajax call:

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

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

2 голосов
/ 15 июля 2013

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

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

2 голосов
/ 07 сентября 2012

У меня была похожая проблема, и для меня было решение использовать jsonp вместо json.Таким образом, мне не нужно было указывать версию клиента для IE.

Это можно сделать только в том случае, если хост сервера json поддерживает переменную запроса обратного вызова или у вас есть доступ к серверу и вы можете добавить поддержку.Вот страница, которая помогла мне понять процесс.Он сфокусирован на .net mvc, но он хорошо просматривает разницу между json и jsonp.

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

2 голосов
/ 23 февраля 2011

Проверьте домен, к которому вы обращаетесь, там должны быть следующие заголовки ответа

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

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

0 голосов
/ 12 марта 2014

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

0 голосов
/ 31 июля 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...