加载iframe时的Javascript触发器函数

加载iframe时的Javascript触发器函数,javascript,Javascript,我通过一个对象实例创建一个iFrame,当iFrame加载时,我需要从原始对象触发一个方法,并能够在对象中检索iFrame的内容。目前,“向上”显然不存在 function iFrame() { var Id="1234"; var d = document.createElement('DIV'); d.innerHTML = '<iframe id="'Id+'" name="'+Id+'" onload="up('+Id+');"></iframe>';

我通过一个对象实例创建一个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);
}   
函数iFrame(){ var Id=“1234”; var d=document.createElement('DIV'); d、 innerHTML=''; 文件.正文.附件(d); obj=这个; var i=document.getElementById(this.frameId); i、 up=(函数(obj){obj.iFrameOnload()})(obj); } iFrame.prototype.iFrameOnload=函数(id){ d=document.getElementById(id).contentWindow.document; 警报(d.body.innerHTML); }
您应该直接使用DOM创建iframe,而不是将普通HTML放在div中。这给您带来了几个好处:

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元素。毕竟是您直接创建的,所以您已经有了对它的引用。

您在那里的代码有点混乱。请允许我提出其他建议:

包括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>

$(函数(){
//创建iframe
var url='1〕http://www.google.com';
var iframe_html='';
$('body').append(iframe_html);
//绑定加载事件
$('#iframe').load(函数(){
//加载代码在这里
});
});

希望对您有所帮助

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

并使用“this”参数调用它

d.innerHTML = '<iframe  id="'Id+'" name="'+Id+'" onload="up(this);"></iframe>';
d.innerHTML='';
在这种情况下,完整的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);
}
功能启动(iframe\u元素){
警报(“在up()函数中”);
}
函数iFrame(){
var Id=“1234”;
var d=document.createElement('DIV');
d、 innerHTML='';
文件.正文.附件(d);
}

您的问题到底是什么?到目前为止,您的代码运行到哪一点?我需要在原始对象方法中出现警报iFrameOnload@user1209203不需要那个额外的功能。事件处理程序本身(在我的示例中是一个匿名函数)完成它的工作。如果愿意,您可以给它一个名称,然后只需调用
frame.addEventListener('load',iframeOnLoadHandler,false)而不是
iframeOnLoadHandler
是在别处定义的函数。请显示您正在尝试执行的操作。如果您想调用添加到原型中的
iFrameOnload
(顺便说一句,您不应该调用),那么可以使用
函数(){this.iFrameOnload();}
作为事件处理程序。但是,您的整个功能并没有真正意义:它不应该添加到原型中,如果您这样做了,您真的不应该首先在文档中查找对象。只需使用
this
引用它。这是一个方法,我可以覆盖该方法或扩展该对象的不同用途。为什么要进行向下投票?你能解释一下吗?
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);
}