Если вы владеете всеми веб-сайтами, включая сервер загрузки и веб-сайт, на котором вы развертываете загрузчик, возможно, вам помогут преодолеть некоторые простые хитрости DNS.
- Скажем, например, домен вашего сервера загрузки:
upload.example.com
.
- Допустим, ваш сервер
www.example.com
.
В приведенном выше случае вы можете включить межсайтовый скриптинг, установив свойство document.domain:
document.domain = "example.com";
Это позволяет www.example.com взаимодействовать с iframe upload.example.com.
Возможность связи между поддоменами может помочь вам общаться между другими веб-серверами, при условии, что вы являетесь владельцем веб-сайтов.
Что вы делаете, если домены разные?
Предположим следующее:
upload.example.com
ваш сервер загрузки.
www.domain.com
- ваш веб-сайт, который является родительским документом, содержащим загрузчик iframe.
Теперь, опять же, мы предполагаем, что вы владеете обоими этими доменными именами или, по крайней мере, имеете доступ к настройкам. Используя то, что мы знаем выше о включении межсайтовых сценариев на поддоменах, вы можете воспользоваться некоторыми хитростями DNS.
- В вашем диспетчере DNS создайте CNAME для
upload.domain.com
и укажите этот поддомен на том же сервере, что и upload.example.com
. Когда вы закончите, оба upload.example.com
и upload.domain.com
указывают на один и тот же сервер и приложение PHP.
- In
www.domain.com
, вставьте upload.domain.com
и установите document.domain="domain.com";
- В
www.example.com
, вставка upload.example.com
и установка document.domain="example.com";
Вы можете видеть, что в обоих случаях имя домена вашего веб-сайта совпадает с именем домена загрузчика, а свойство document.domain соответствует домену.
При вызове $('iframe', top.document).css('border', '1px green solid');
вы не получите никаких ошибок разрешения.
Подводя итог, просто убедитесь, что для любого веб-сайта, в который вы вставили этот iframe-загрузчик, что вы создали псевдоним CNAME для этого загрузчика, который соответствует домену веб-сайта, и что свойство document.domain установлено в обоих загрузчиках. и веб-сайт.
Вы можете использовать свойство document.referrer
в iframe для динамического определения контекста родительского документа, чтобы определить, какое свойство домена должно быть установлено:
// uploader file code
// array split by period to get domain ["http://uploader", "example", "com/iframe/uploadFile", "php"]
var domainSplit = document.referrer.split(".");
// the 2nd place in the array is the domain. You may need to improve this for deeper subdomains
document.domain = domainSplit[1];
ПРИМЕЧАНИЕ: Я предполагаю, что вы используете Apache и PHP. Если это так, вы можете создавать записи ServerAlias для всех ваших upload.XYZ.com
доменов. Если вы используете другой сервер, у большинства из них есть какой-то метод установки ServerAlias.