jQuery форма после междоменного домена Amazon S3, т. е. < 10, ошибка "прервана"
Привет, кто-нибудь знает, как публиковать междоменные формы для нескольких доменов в Amazon S3 (например) в IE 8, 9?
Мы использовали плагин форм jQuery. Может быть, он не поддерживает объект XDomainRequest? JQuery формирует неправильный путь?
Мы настроили корзину Amazon S3, чтобы разрешить origin * для отправки, получения и, таким образом, работу во всех других браузерах, даже в IE 10.
Начинается размещение. Из того, что я могу сказать, он отображает сообщение о статусе публикации против амазонского URL, который отображается слева в браузере. Но затем он вызывает функцию возврата ошибки (указанную в опциях ajax) со статусом "aborted". Ничего больше. Похоже, запрос отменен. Файл никогда не дойдет до Amazon, если ошибка придет с Amazon, я думаю, она будет немного более подробной.
Я также пытался отправлять сообщения с https (как кто-то предлагал, поскольку URL-адрес загрузки Amazon использует https). Нет разницы.
Есть идеи?
/ John
1 ответ
Ваше подозрение верно - ваш плагин не будет поддерживать XDomainRequest, потому что он основан на jQuery.
JQuery не включает поддержку XDR:
Краткое описание проблемы XDomainRequest:
- jQuery не включает поддержку XDomainRequest, поскольку существует множество серьезных ограничений для XDR.
IE версии 10 поддерживает CORS, но предыдущие версии не поддерживают XDR:
MSHTML / Trident 6.0 (Internet Explorer 10) имеет встроенную поддержку. MSHTML/Trident 4.0 и 5.0 (Internet Explorer 8 и 9) обеспечивает частичную поддержку через объект XDomainRequest.
Вы можете попробовать добавить этот плагин jQuery на свой сайт, чтобы посмотреть, решит ли он вашу проблему. Из README:
Плагин jQuery, который прозрачно добавляет Cross Origin Resource Sharing (CORS) среди браузеров, включая IE8+
РЕДАКТИРОВАТЬ: Если это не сработает, вы можете добавить следующий фрагмент, который пытается такую же модификацию:
if ('XDomainRequest' in window && window.XDomainRequest !== null) {
// override default jQuery transport
jQuery.ajaxSettings.xhr = function() {
try { return new XDomainRequest(); }
catch(e) { }
};
// also, override the support check
jQuery.support.cors = true;
}