Доступ запрещен jQuery script в IE
У меня есть iframe, используя jQuery 1.4.2 script. Тот же самый iframe вводится на сайты http
и https
. JQuery script включен в основной 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)
}
});
Ответы
Ответ 1
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]);
вы можете найти несколько рекомендаций здесь
Ответ 2
Это решило проблему изящно для меня:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
Просто установите/скомпилируйте после jQuery и перед script и используйте метод $.ajax, как обычно, остальные будут обрабатываться автоматически.
Ответ 3
Попробуйте использовать последний JQuery ( > jquery-1.8.0)? Начиная с версии 1.8.0, они решили некоторые ошибки IE9. Возможно, этот тоже.
http://blog.jquery.com/2012/08/30/jquery-1-8-1-released/
Ответ 4
Проверьте домен, к которому вы обращаетесь, следуя заголовкам ответа
"Access-Control-Allow-Methods" : "POST, GET, OPTIONS"
"Access-Control-Allow-Origin" : "http://www.mydomain.com" or "*"
другой домен должен разрешить ваш запрос script. Еще один заголовок, который будет добавлен в ваш ответ, - заголовок P3P.
"p3p" : "CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
он должен помочь вам.
Ответ 5
У меня была аналогичная проблема, и решение для меня заключалось в использовании jsonp вместо json. Таким образом, мне не нужно было выпускать версию для IE.
Это можно сделать только в том случае, если хост json-сервера поддерживает переменную запроса обратного вызова или у вас есть доступ к серверу и вы можете добавить поддержку. Вот страница, которая помогла мне понять этот процесс. Его .net mvc сфокусирован, но он дает хорошее представление о различии между json и jsonp.
http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx
Ответ 6
Я изменил свой JQuery с версии 1.10.1 на 1.10.2 и, похоже, решил эту проблему для меня.
Ответ 7
Я столкнулся с подобной проблемой.
Я использовал элемент управления загрузкой файлов, но он был скрыт, и у меня был другой элемент, который пытался контролировать загрузку файла и события для загрузки файла по ajax.
попробуйте напрямую использовать управление загрузкой файлов. эта проблема решена в моем приложении.
Ответ 8
Кажется, что MS находит свой собственный способ делать что-то, а не принимать отраслевые рекомендации. Я нашел решение здесь:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.js
Ответ 9
Я получаю эту ошибку (и, следовательно, google здесь), но причина была совсем другая. Поэтому, если у вас нет кросс-сайта и по-прежнему получаю эту ошибку с доступом: дважды проверьте значение
скажем, что вы воздействуете на одну из вас с неправильным следующим выражением:
urlVar = $("theID").val // without () this was the error!
[...] ajax call:
data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
У Google/FF нет проблем с этим (проверьте, что такое сервер на стороне сервера...) НО IE отказываются отправлять это!
Ответ 10
Просто добавьте 'callback =?' на ваш запрос URL-адреса ajax, как здесь:
http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html