Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.07.2015, 22:54
Новичок на форуме
Отправить личное сообщение для dfionov Посмотреть профиль Найти все сообщения от dfionov
 
Регистрация: 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 свои методы?
Ответить с цитированием
  #2 (permalink)  
Старый 22.07.2015, 00:21
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

dfionov,
Загрузки фрейма дожидаетесь ? В ИЕ он типично дольше грузится, чем top document

Последний раз редактировалось Deff, 22.07.2015 в 00:23.
Ответить с цитированием
  #3 (permalink)  
Старый 22.07.2015, 00:53
Новичок на форуме
Отправить личное сообщение для dfionov Посмотреть профиль Найти все сообщения от dfionov
 
Регистрация: 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.
Ответить с цитированием
  #4 (permalink)  
Старый 22.07.2015, 01:22
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

dfionov,
1. Пробуйте впихнуть во фрейм скрипт, пусть он во фрейме сам меняет прототипы, (дать функции(или объекту) глобальное имя, для возможности вызова и задания параметров из топ документа)
2. А само свойство prototype на главной работает ?

Последний раз редактировалось Deff, 22.07.2015 в 01:26.
Ответить с цитированием
  #5 (permalink)  
Старый 22.07.2015, 01:39
Новичок на форуме
Отправить личное сообщение для dfionov Посмотреть профиль Найти все сообщения от dfionov
 
Регистрация: 21.07.2015
Сообщений: 7

Deff,
1. Это первое, что пришло на ум, но это, скорее, как костыль выглядит, а хочется найти решение.
2. Да, всё работает. Все встроенные объекты работают, их прототипы также создаются.
Object, Array, Element содержат всё, что требуется, а <iframe>.window.Object и .Array не работают. Но при этом <iframe>.window.Element почему-то работает.
Ответить с цитированием
  #6 (permalink)  
Старый 22.07.2015, 01:53
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 22.07.2015, 02:17
Новичок на форуме
Отправить личное сообщение для dfionov Посмотреть профиль Найти все сообщения от dfionov
 
Регистрация: 21.07.2015
Сообщений: 7

Deff, всё верно, объекты, созданные внутри одного объекта window и не должны переноситься в, по сути, другое окно (коим iframe и является). Но тут вопрос в другом - встроенные объекты-то должны быть у этого нового окна. А их почему-то нет.

А по поводу defaultView:
var doc= winNAME.contentWindow || winNAME.contentDocument;
Тут мы получим или contentWindow, или (совсем в старых браузерах) contentDocument. Но это разные по иерархии объекты. Первый - window, второй - document. У второго есть свойство defaultView, которое как раз ссылается на его родительский window.
Ответить с цитированием
  #8 (permalink)  
Старый 22.07.2015, 02:30
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

dfionov,
Как добавить событие на document в Iframe ?
http://www.w3schools.com/jsref/prop_...ntdocument.asp
Отлов изменения размера элемента. Какие способы есть?

Для получения window. фрейма наиболее просто использовать атрибут name="winNAME" и по нему обращаться к фрейму
Ответить с цитированием
  #9 (permalink)  
Старый 22.07.2015, 03:00
Новичок на форуме
Отправить личное сообщение для dfionov Посмотреть профиль Найти все сообщения от dfionov
 
Регистрация: 21.07.2015
Сообщений: 7

По ссылкам идёт обсуждение того, как вообще получить доступ к элементам iframe.
А у меня уже есть полученный [object Window] моего ифрейма, но никак не пойму, почему у него в ie8 отсутствуют встроенные объекты типа Object, Array. Т.е. <iframe>.window.Object, например, равен undefined.
Ответить с цитированием
  #10 (permalink)  
Старый 22.07.2015, 03:09
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

dfionov,
Ну дык попробуйте вставить скрипт в ифрейм и вызвать c главной функцию во фрейме
через winNAME.имя фукции
Как вставить скрипт - там разбиралось(вроде как пять строк).
А если созданный фрейм не пустой изначально(а со ссылкой), так можно вставить прям скрипт изначально на страницу страницу.
Функция во фрейме может передать данные(вызвать) функцию на главной
window.top.имя функции
=======================================
Вы проставили фрейму name ?
<iframe name="winNAME" src=""></iframe>
Тогда вызов функции из фрейма: winNAME.имя функции

Последний раз редактировалось Deff, 22.07.2015 в 03:33.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Iframe с локальным файлом внутри namename1 Элементы интерфейса 6 26.12.2013 05:18
получение ссылки на iframe из содержимого в этом iframe mister_maxim Events/DOM/Window 5 15.02.2013 22:48
проблемы с draggble() внутри iframe Гоша Элементы интерфейса 0 07.07.2011 12:30
Получение Url страницы загруженной в iframe taraba4 Общие вопросы Javascript 40 05.01.2011 02:39
Как получить текст внутри iframe на другом домене? Alexander Majesty Events/DOM/Window 1 23.12.2009 22:10