繁体   English   中英

扩展iframe的文档DOM

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM