Та же проблема происхождения (загрузка файла) - PullRequest
3 голосов
/ 26 апреля 2011

Клиент находится в домене foo.com и должен загрузить (отправить POST XMLHttpRequest) на upload.foo.com.

Это ограничено из-за той же политики происхождения.
Однако мне удалось обойти эту проблему: динамически создать iframe при foo.com открытии upload.foo.com и добавить код JavaScript, который выполняет запрос POST из upload.foo.com, например так: iframe.onLoad [..]

(a=(b=doc)
.createElement('script'))
.src='http://foo.com/upload.php?'+Math.random(),
b.body.appendChild(a);
void(0);

Теперь, мне кажется, это излишне: если позднее возможно, моя логика говорит мне, что первое также возможно. Это 1014 *

- обновить

Я только что заметил, что в поддомене есть файл, содержащий это:

<?xml version="1.0" ?> 
<cross-domain-policy>
<allow-access-from domain="*" />
<allow-access-from domain="*.foo.com" secure="false" /> 
</cross-domain-policy>

Могу ли я использовать это как-нибудь в своих интересах?

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

XMLHttpRequest не чувствителен к document.domain, поскольку объект требует взаимного согласия по соображениям безопасности, а XHR не может узнать, для какой цели может быть задано значение document.domain.Чтобы SiteA взаимодействовал с DOM сайта SiteB, оба сайта должны иметь общий суффикс частного домена, и оба должны подключиться к сообщению, установив для document.domain общий суффикс.

Ваш файл междоменной политики на самом деле не имеет большого смысла (поскольку он включает все, а затем подмножество всего), но он используется для Flash, а не для XHR (который использует CORS).

0 голосов
/ 26 апреля 2011

Я не думаю, что это можно упростить, но если вам это кажется не элегантным, есть более простые способы использования JS с перекрестным происхождением.

Действительно, это почти то же самое, что делает jQuery, если вы пытаетесь отправить запрос, используя jsonp. Википедия для JSONP
(Наряду с несколькими другими способами обойти ограничение одного и того же происхождения)

Я не знаю, об этом ли вы спрашиваете, но во имя удобства обслуживания я бы посоветовал вам использовать jQuery .

Вам нужно установить dataType: 'jsonp' и все готово. При желании вы можете установить параметр "callback =?" (См. Документацию).

...