1

我有一个页面,我需要在其中动态创建一个 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>
4

3 回答 3

2

抱歉,如果 iframe 引用来自另一个域的 URL 源,您将无法访问它。

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

话虽如此,您可以访问它的主体,前提是您有来自同一域的 url,或者如果您使用“javascript:void(0);”填充属性 src。之后,尝试以这种方式访问​​它:

$($('iframe').contents().get(0)).find('body')
于 2012-10-11T15:06:01.620 回答
1

我能够使用类似于这个问题的答案的修复程序来解决这个问题:

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

从每个定义来看,这都是一种 hack,但我认为这是解决问题的最佳方法。

于 2012-10-11T16:34:40.900 回答
0

创建 iframe 时,请确保它指定了 src:

src='about:blank'

或者在服务器上创建一个 blank.html 并指向它

于 2012-10-11T15:06:50.023 回答