Расширение DOM документа для фреймов - PullRequest
1 голос
/ 29 июля 2010

У меня уже есть набор функций, которые я использую для расширения документа (например, bind / unbind).Поэтому я могу делать такие вещи, как: 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

Ответы [ 3 ]

1 голос
/ 29 июля 2010

Вы не можете сделать это, по крайней мере, не кросс-браузерным способом. В идеале вы должны расширить prototype объекта HTMLDocument, но, конечно, IE не имеет этого объекта в первую очередь. В качестве обходного пути вы можете создать функцию, которая создает IFrame и автоматически расширяет его объект document, и использовать эту функцию исключительно для создания ваших IFrame, но если фреймы уже находятся на странице, вы мало что можете сделать об этом, за исключением циклического прохождения каждого и расширения его вручную.

$('iframe').each(function() {
    MyLibrary.extend(this.contentWindow.document, MyDocumentPrototype);
});

(Предполагая jQuery, вставьте свой код библиотеки, чтобы получить все IFrames здесь.)

В общем, расширение встроенных DOM-объектов - это плохая идея , поэтому вам следует придумать другой способ сделать то, что вы хотите.

0 голосов
/ 29 июля 2010

Я предполагаю, что some_iframe - это идентификатор. Чтобы выбрать объект по идентификатору с помощью jQuery, вам нужно использовать #, как в CSS.

Так и должно быть $('#some_iframe').eq(0).contentWindow.document.prototype.

Если вы не используете #, который используется для выбора по имени TAG.

Таким образом, $('p') выберет все <p> теги на странице.

0 голосов
/ 29 июля 2010

Как вы расширяете document изначально?Разве вам не нужно расширять HTMLDocument.prototype вместо document.prototype, поскольку последний не является конструктором?

Это означает, что вы расширяете неправильную вещь в iframe?Если я не прав, скажите, пожалуйста, как вы его расширяете?

...