2011-08-25 4 views
1

Я хочу простой и легкий способ сделать междоменные запросы на адрес api (api.example.com), который является субдоменом моего основного домена (example.com).Возможно ли изменение DOM iframe из родительского фрейма (тот же document.domain)?

Я читал много о методах и взломах, чтобы иметь дело с 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/plugins/scripts в одном файле, который используется example.com; что дает мне 2 варианта (для использования jQuery в api.example.com): загрузите весь комплект снова или загрузите не кешированную версию jQuery. Мне тоже не нравится.

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

Благодарим вас заблаговременно, Leonardo.

+0

если оба кадра ссылаются на тот же файл на вашем сервере он будет загружаться и кэшироваться только один раз –

+0

Как насчет использования памяти? Загрузка в два раза того же, а не маленького файла потребует памяти, которую можно сохранить. Это еще более важно в мобильных браузерах. – leods92

+0

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

ответ

1

файл 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> 

Код выше предупредит 'привет', а затем 'до свидания'

+0

Спасибо! Отвечал на мой вопрос. ** Можно установить свойства в дочернем iframe **. Для тех, кто задается вопросом, получаю ли я то, что я хотел бы работать: я не сделал :(Еще пытаюсь.То, что я смог сделать до сих пор, - это клонирование всего jQuery и добавление к child-iframe. Проблема в том, что перегрузка ресурсов продолжает происходить (как и загрузка всей структуры тегом скрипта). То, что я пытаюсь сделать сейчас, - это создать уникальный объект XHR в iframe и вызвать его из основного домена, но пока успеха нет ... – leods92