Как бороться с динамической настройкой содержимого iframe

У меня есть страница, где мне нужно динамически создать iframe и вставить его в div на странице. Я создаю iframe следующим образом:

var frame = $('<iframe>')
    .attr('id', 'myIframe')
    .addClass('someClass')
    .appendTo($('#someDiv'));

В зависимости от некоторых условий мне нужно: A) установить для iframe src какую-то другую страницу ИЛИ B) динамически добавить HTML в iframe.

У меня есть вариант А, работающий нормально, но вариант Б вызывает ошибки безопасности:

if (someCondition) {
    // option A, works fine
    frame.attr('src', someURL);
} else {
    // option B, blows up with "Access is denied."
    $(frame[0].contentWindow.document).find('body').html(someHTML);
}

Нужно ли устанавливать document.domain на динамический iframe, прежде чем пытаться установить HTML? Как бы я вообще это сделал? Есть ли более простой способ добавить динамический контент в динамический фрейм?

Заранее спасибо.

Правка здесь представляет HTML-код динамического iframe, как и было запрошено:

<div id="someDiv">
    <iframe id="myIframe" class="someClass"></iframe>
</div>

3 ответа

Решение

Мне удалось использовать исправление, подобное ответу на этот вопрос, чтобы обойти проблему:

var frame = $('<iframe>')
    .attr('id', 'myIframe')
    .addClass('someClass')
    .attr('src', 'javascript:(function () {' + 
        'document.open();document.domain=\'myDomain.net\';document.close();' + 
     '})();');
    .appendTo($('#someDiv'));

Это хак по всем определениям, но я думаю, что это лучший способ решить проблему.

Извините, но если iframe ссылается на источник URL из другого домена, вы не можете получить к нему доступ.

http://javascript.info/tutorial/same-origin-security-policy

При этом вы можете получить доступ к его телу, если у вас есть либо URL-адрес из того же домена, либо если вы заполните атрибут src "javascript:void(0);". после этого попробуйте получить к нему доступ таким образом:

$($('iframe').contents().get(0)).find('body')

Когда вы создаете iframe, убедитесь, что у него указан src:

src='about:blank'

Или создайте blank.html на сервере и укажите на это

Другие вопросы по тегам