0

我正在通过对象实例创建 iFrame,当 iFrame 加载时,我需要从原始对象触发一个方法,并能够在对象中检索 iframe 的内容。此刻“向上”显然是不存在的。

function iFrame() {

var Id="1234";

var d = document.createElement('DIV');
d.innerHTML = '<iframe  id="'Id+'" name="'+Id+'" onload="up('+Id+');"></iframe>';

    document.body.appendChild(d);

    obj=this;

    var i = document.getElementById(this.frameId);
    i.up = (function(obj){obj.iFrameOnload()})(obj);

}

iFrame.prototype.iFrameOnload=function(id) {

d = document.getElementById(id).contentWindow.document;


alert(d.body.innerHTML);
}   
4

3 回答 3

1

与其将纯 HTML 放在 div 中,不如直接使用 DOM 创建 iframe。这给您带来了几个好处:

var frame = document.createElement('iframe');

// set id and name attributes directly (although you don’t actually need them)
frame.id = '1234';
frame.name = '1234';

// set frame source (you probably want to set this)
frame.src = '';

// register event listener for the `load` event
frame.addEventListener('load', function () {
    // event handler here
    var d = this.contentWindow.document;
    alert(d.body.innerHTML);
}, false);

document.body.appendChild(frame);

如您所见,无需再次询问 DOM 以通过 ID 或其他方式获取 iframe 元素。毕竟是你直接创建的,所以你已经有了对它的引用。

于 2013-10-14T20:27:21.153 回答
0

你的代码有点乱。请允许我提出其他建议:

包括 jQuery:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

接着:

<script type="text/javascript">
$(function(){
    // create the iframe
    var url = 'http://www.google.com';
    var iframe_html = '<iframe src="' + url + '" id="iframe"></iframe>';
    $('body').append(iframe_html);

    // bind load event
    $('#iframe').load(function(){
        // on load code here
    });

});
</script>

希望有帮助

于 2013-10-14T20:29:23.383 回答
0

您可以创建一个全局函数 up():

function up (iframe_element) {
    alert("In up() function");
}

并使用 'this' 参数调用它

d.innerHTML = '<iframe  id="'Id+'" name="'+Id+'" onload="up(this);"></iframe>';

在这种情况下,完整的 JS 代码是:

function up (iframe_element) {
    alert("In up() function");
}

function iFrame() {
    var Id="1234";

    var d = document.createElement('DIV');
    d.innerHTML = '<iframe  id="'Id+'" name="'+Id+'" onload="up(this);"></iframe>';

    document.body.appendChild(d);
}
于 2013-10-14T20:31:39.067 回答