[英]Extend document DOM for iframes
我已经有一组用于扩展文档的功能(例如,绑定/取消绑定)。 因此,我可以执行以下操作: document.bind('load',someAction,{})
但是如果我这样做是行不通的: $('some_iframe').contentWindow.document.bind(...)
显然, $('some_iframe').contentWindow.document.prototype
不存在。
编辑:这是代码细分:
//the eggplant library
eggp = {
extend: function(dest, source){
for(var prop in source)
dest.prototype[prop] = source[prop];
return dest;
},
//other functions below...
bind{},
unbind{}
}
//extend the DOM
eggp.extend(Document, eggp);
//extending the iframe document DOESN'T WORK
eggp.extend(someiframe.contentWindow.document, eggp);
我检查了是否someiframe.contentWindow.document
未定义,但它返回object HTMLDocument
您无法做到这一点,至少不能以跨浏览器的方式做到这一点。 理想情况下,您应该扩展HTMLDocument
对象的prototype
,但是,当然,IE首先没有这个对象。 解决方法是,您可以创建一个函数,该函数创建一个IFrame并自动扩展其document
对象,并专门使用该函数来创建IFrame,但是如果框架上已经存在这些框架,则您无能为力无需遍历每个对象并手动进行扩展。
$('iframe').each(function() {
MyLibrary.extend(this.contentWindow.document, MyDocumentPrototype);
});
(假设使用jQuery,请插入自己的库代码以在此处获取所有IFrame。)
但是,一般而言,扩展内置DOM对象不是一个好主意 ,因此您应该想出另一种方法来完成所需的工作。
您最初如何扩展document
? 您是否不必扩展HTMLDocument.prototype
而不是document.prototype
,因为后者不是构造函数?
意味着您要在iframe中扩展错误的内容? 如果我错了,请告诉我您最初是如何扩展它的。
我猜“ some_iframe”是一个ID。 要使用jQuery通过ID选择对象,您需要使用#
,就像在CSS中一样。
因此应为$('#some_iframe').eq(0).contentWindow.document.prototype
。
如果您不使用#
,则该值用于按TAG名称进行选择。
因此$('p')
将选择页面上的所有<p>
标记。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.