Возможно ли изменить DOM iframe из родительского фрейма (тот же document.domain)? - PullRequest
1 голос
/ 26 августа 2011

Я хочу простой и легкий способ отправки междоменных запросов на мой адрес API ( api.example.com ), который является поддоменом моего основного домена ( example.com ).

Я много читал о методах и способах работы с XDR и их несовместимости с каждым используемым браузером, но XDR все еще очень сложен для меня. Мне не нужно полное / сложное решение, как easyXDM, которое я реализовал и отлично работал.

Итак, я решил «включить CORS», что решило проблему для современных браузеров Webkit и Gecko. Но, как всегда, есть IE (и в данном случае Opera), который еще не совместим с CORS.

Поскольку я хотел продолжить использовать методы jQuery AJAX, я искал решение, которое позволило бы XDR с методами jQuery. Затем я реализовал очень хорошее решение с помощью benvinegar , который заменяет метод jQuery.ajax () и, следовательно, все его зависимые методы: https://gist.github.com/859940. Его скрипт основан на трюке document.domain / iframe.

Перед вызовом функции, предложенной Беном, я протестировал поддержку CORS с помощью jQuery.support.cors (используя jQuery 1.6.2). Все хорошо, работает отлично.

Единственное, что меня не устраивает в приведенном выше связанном скрипте, это то, что мне нужно загрузить библиотеку jQuery из api.example.com , и я этого не хочу. Я собрал пакет минимизированных библиотек JavaScript / плагинов / скриптов в одном файле, который используется example.com ; это дает мне 2 варианта (для использования jQuery в api.example.com ): снова загрузить весь пакет или загрузить только некэшированную версию jQuery. Мне тоже не нравится.

Мой вопрос: возможно ли изменить DOM iframe из родительского фрейма, если оба фрейма имеют один и тот же document.domain? Если да, могу ли я клонировать jQuery из example.com в child-iframe ( api.example.com )? Как? Или я просто без ума от этого, и есть лучшее решение, учитывая то, что я описал?

Спасибо всем заранее, Leonardo.

1 Ответ

1 голос
/ 26 августа 2011

файл test.htm

<iframe name='my-iframe' src='test2.htm' onload="child();"></iframe>
<script>
function child(){
    alert(window.frames['my-iframe'].my_var);
    window.frames['my-iframe'].my_var = 'bye';
    window.frames['my-iframe'].show_var();
}
</script>

файл test2.htm

<script>
window.my_var = 'hi';
function show_var(){
    alert(my_var);
}
</script>

Приведенный выше код предупредит "привет", а затем "пока"

...