如何处理动态设置动态的iframe内容(How to deal with setting dynam

2019-10-17 07:32发布

我有一个页面,我需要动态创建一个iframe,把它贴到网页上的一个div。 我创建这样的iframe:

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

根据一些条件,我需要:A)设置的IFRAME SRC至其他网页或b)一些HTML动态地添加到iframe中。

我选择A工作正常,但B选项是抛出安全错误:

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尝试将HTML之前,对动态的iframe? 我怎么会连做呢? 是否有动态内容附加到一个动态的iframe更简单的方法?

提前致谢。

编辑这里是动态的iframe的HTML渲染,如要求:

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

Answer 1:

很抱歉,但如果IFRAME从另一个域引用URL来源,你不能访问它。

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

话虽这么说,你可以访问它的身上,只要你有无论是从同一个域中的URL,或者如果您填写与src属性“的javascript:无效(0);”。 在此之后,尝试访问它是这样的:

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


Answer 2:

我能够使用类似的答案修复到这个问题才能得到解决这个问题:

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

这是由每个定义一个黑客,但我认为这是解决问题的最好办法。



Answer 3:

当您创建的iframe确保它指定一个src:

src='about:blank'

或创建服务器,并指向一个blank.html



文章来源: How to deal with setting dynamic iframe content dynamically