21.07.2015, 22:54
|
Новичок на форуме
|
|
Регистрация: 21.07.2015
Сообщений: 7
|
|
Получение доступа к 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 свои методы?
|
|
22.07.2015, 00:21
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
dfionov,
Загрузки фрейма дожидаетесь ? В ИЕ он типично дольше грузится, чем top document
Последний раз редактировалось Deff, 22.07.2015 в 00:23.
|
|
22.07.2015, 00:53
|
Новичок на форуме
|
|
Регистрация: 21.07.2015
Сообщений: 7
|
|
Сообщение от Deff
|
dfionov,
Загрузки фрейма дожидаетесь ? В ИЕ он типично дольше грузится, чем top document
|
Да, фрейм успевает загрузиться.
И забыл упомянуть - alert(win.Element) в том же IE8 срабатывает нормально, т. е. показывает ожидаемый
function Element() {
[native code]
}
А вот в win.Object - undefined.
PS: просто alert(Object) выдаёт также нужный function Object()..., но мне нужно именно внутри iframe прототипы задать.
Последний раз редактировалось dfionov, 22.07.2015 в 00:55.
|
|
22.07.2015, 01:22
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
dfionov,
1. Пробуйте впихнуть во фрейм скрипт, пусть он во фрейме сам меняет прототипы, (дать функции(или объекту) глобальное имя, для возможности вызова и задания параметров из топ документа)
2. А само свойство prototype на главной работает ?
Последний раз редактировалось Deff, 22.07.2015 в 01:26.
|
|
22.07.2015, 01:39
|
Новичок на форуме
|
|
Регистрация: 21.07.2015
Сообщений: 7
|
|
Deff,
1. Это первое, что пришло на ум, но это, скорее, как костыль выглядит, а хочется найти решение.
2. Да, всё работает. Все встроенные объекты работают, их прототипы также создаются.
Object, Array, Element содержат всё, что требуется, а <iframe>.window.Object и .Array не работают. Но при этом <iframe>.window.Element почему-то работает.
|
|
22.07.2015, 01:53
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
dfionov,
Ну по идее таже фигня присутствует и в jquery, по крайней мере в старых, DOM - объекты созданные на основном документе не переносятся во фрейм даже клонированием, причем это не всегда, иногда простые объекты и переносятся, возможно сложности с отцепкой событий
Приходится использовать такие выкрутасы
var doc= winNAME.contentWindow || winNAME.contentDocument
winNAME.$('cелектор',doc.body)
Ксать не понял зачем у Вас
var win = iframe.contentWindow || iframe.contentDocument .defaultView;
Последний раз редактировалось Deff, 22.07.2015 в 01:55.
|
|
22.07.2015, 02:17
|
Новичок на форуме
|
|
Регистрация: 21.07.2015
Сообщений: 7
|
|
Deff, всё верно, объекты, созданные внутри одного объекта window и не должны переноситься в, по сути, другое окно (коим iframe и является). Но тут вопрос в другом - встроенные объекты-то должны быть у этого нового окна. А их почему-то нет.
А по поводу defaultView:
var doc= winNAME.contentWindow || winNAME.contentDocument;
Тут мы получим или contentWindow, или (совсем в старых браузерах) contentDocument. Но это разные по иерархии объекты. Первый - window, второй - document. У второго есть свойство defaultView, которое как раз ссылается на его родительский window.
|
|
22.07.2015, 02:30
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
|
|
22.07.2015, 03:00
|
Новичок на форуме
|
|
Регистрация: 21.07.2015
Сообщений: 7
|
|
По ссылкам идёт обсуждение того, как вообще получить доступ к элементам iframe.
А у меня уже есть полученный [object Window] моего ифрейма, но никак не пойму, почему у него в ie8 отсутствуют встроенные объекты типа Object, Array. Т.е. <iframe>.window.Object, например, равен undefined.
|
|
22.07.2015, 03:09
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
dfionov,
Ну дык попробуйте вставить скрипт в ифрейм и вызвать c главной функцию во фрейме
через winNAME.имя фукции
Как вставить скрипт - там разбиралось(вроде как пять строк).
А если созданный фрейм не пустой изначально(а со ссылкой), так можно вставить прям скрипт изначально на страницу страницу.
Функция во фрейме может передать данные(вызвать) функцию на главной
window.top.имя функции
=======================================
Вы проставили фрейму name ?
<iframe name="winNAME" src=""></iframe>
Тогда вызов функции из фрейма: winNAME.имя функции
Последний раз редактировалось Deff, 22.07.2015 в 03:33.
|
|
|
|