Получение доступа к Object.prototype внутри Iframe в IE8
Добрый вечер.
Есть созданный iframe. Появилась необходимость добавить у этого iframe несколько методов в prototype у всех объектов (Object). Получаем сначала window ифрейма var win = iframe.contentWindow || iframe.contentDocument.defaultView;Далее пытаемся получить Object внутри этого window alert(win.Object);Во всех браузерах, включая ie выше 8-й версии, получаем объект, а в IE8 (ниже не проверял - не требуется) получаем undefined. Так вот, вопрос - как в IE8 добавить внутри Iframe в прототип к Object свои методы? |
dfionov,
Загрузки фрейма дожидаетесь ? В ИЕ он типично дольше грузится, чем top document |
Цитата:
И забыл упомянуть - alert(win.Element) в том же IE8 срабатывает нормально, т. е. показывает ожидаемый function Element() { [native code] }А вот в win.Object - undefined. PS: просто alert(Object) выдаёт также нужный function Object()..., но мне нужно именно внутри iframe прототипы задать. |
dfionov,
1. Пробуйте впихнуть во фрейм скрипт, пусть он во фрейме сам меняет прототипы, (дать функции(или объекту) глобальное имя, для возможности вызова и задания параметров из топ документа) 2. А само свойство prototype на главной работает ? |
Deff,
1. Это первое, что пришло на ум, но это, скорее, как костыль выглядит, а хочется найти решение. 2. Да, всё работает. Все встроенные объекты работают, их прототипы также создаются. Object, Array, Element содержат всё, что требуется, а <iframe>.window.Object и .Array не работают. Но при этом <iframe>.window.Element почему-то работает. |
dfionov,
Ну по идее таже фигня присутствует и в jquery, по крайней мере в старых, DOM - объекты созданные на основном документе не переносятся во фрейм даже клонированием, причем это не всегда, иногда простые объекты и переносятся, возможно сложности с отцепкой событий Приходится использовать такие выкрутасы var doc= winNAME.contentWindow || winNAME.contentDocument winNAME.$('cелектор',doc.body) Ксать не понял зачем у Вас var win = iframe.contentWindow || iframe.contentDocument.defaultView; |
Deff, всё верно, объекты, созданные внутри одного объекта window и не должны переноситься в, по сути, другое окно (коим iframe и является). Но тут вопрос в другом - встроенные объекты-то должны быть у этого нового окна. А их почему-то нет.
А по поводу defaultView: var doc= winNAME.contentWindow || winNAME.contentDocument;Тут мы получим или contentWindow, или (совсем в старых браузерах) contentDocument. Но это разные по иерархии объекты. Первый - window, второй - document. У второго есть свойство defaultView, которое как раз ссылается на его родительский window. |
dfionov,
http://javascript.ru/forum/events/29...-v-iframe.html http://www.w3schools.com/jsref/prop_...ntdocument.asp http://javascript.ru/forum/events/35...osoby-est.html Для получения window. фрейма наиболее просто использовать атрибут name="winNAME" и по нему обращаться к фрейму |
По ссылкам идёт обсуждение того, как вообще получить доступ к элементам iframe.
А у меня уже есть полученный [object Window] моего ифрейма, но никак не пойму, почему у него в ie8 отсутствуют встроенные объекты типа Object, Array. Т.е. <iframe>.window.Object, например, равен undefined. |
dfionov,
Ну дык попробуйте вставить скрипт в ифрейм и вызвать c главной функцию во фрейме через winNAME.имя фукции Как вставить скрипт - там разбиралось(вроде как пять строк). А если созданный фрейм не пустой изначально(а со ссылкой), так можно вставить прям скрипт изначально на страницу страницу. Функция во фрейме может передать данные(вызвать) функцию на главной window.top.имя функции ======================================= :) Вы проставили фрейму name ? <iframe name="winNAME" src=""></iframe>Тогда вызов функции из фрейма: winNAME.имя функции |
Часовой пояс GMT +3, время: 06:30. |