我正在通过对象实例创建一个iFrame,当iFrame加载时我需要从原始对象触发一个方法,并能够在对象中检索iframe的内容。目前“up”显然不存在。
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);
}
答案 0 :(得分:1)
您应该直接使用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元素。毕竟你是直接创建的,所以你已经有了它的引用。
答案 1 :(得分: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>
希望有所帮助
答案 2 :(得分: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);
}