2016-11-19 5 views
0

Я создал прототипы, такие как hasClass(), поэтому я могу позвонить e.target.hasClass('className');. Теперь, когда я вызываю прототип, он работает, однако у меня есть iframe на моей странице, в который я вхожу и из всех времен, когда я работаю над создателем страницы. Однако, если я имею в виду элемент внутри iframe, прототип функции не существует для элемента.Как разрешить iframe для доступа к элементу.prototype

Как я могу получить функции Element.prototype для работы как в родительском, так и в iframe?

+0

Использовать событие load iframe для назначения тех же свойств прототипа внутри каждого окна кадра – charlietfl

+0

Как бы я это сделал, у меня есть событие onload в iframe, но не более того. – mdixon18

+0

А вы хотите поставить определения прототипов в функцию onload. – mdixon18

ответ

2

Вам нужно открыть окно IFrame внутри обработчика событий нагрузки и может сделать что-то вроде следующего:

var frame = document.getElementById('ifrm'); 
frame.onload = function() { 
    var win = this.contentWindow || this.contentDocument; 
    win.Element.prototype.test = function() { 
    this.innerHTML = 'Iframe Prototype content' 
    } 
    win.document.getElementById('heading').test() 

} 

Так что, если вы должны были обернуть все новые прототипы свойств в функции, которые вы могли бы назвать, что и в главном контексте окна и контекст оконной рамы

DEMO

+0

Спасибо за это. У меня есть быстрый вопрос. Это работает для меня красиво, но если я создаю элемент динамически, то функция не работает для динамического элемента, есть ли какая-то вещь, которую я могу создать, которая ищет новые элементы, и когда она создана, автоматически назначает protoype? – mdixon18

+0

Я не понимаю, почему это не сработает, если элемент находится в dom. Элемент window.Element не изменился. Обновление демо для воспроизведения проблемы – charlietfl

+0

Ах, я не заметил эту проблему, как только я ее отправил. Большинство моих прототипов работают правильно. Один из них не является, и это потому, что я использую querySelectorAll, который, очевидно, не является отдельным элементом. Это был просто заблуждение от моего имени. Я приношу извинения. Спасибо за вашу помощь. – mdixon18

0

Каждое окно имеет свой собственный элемент Element. Вам нужно добавить свою функцию к прототипу элемента, принадлежащего iframe, а также к родительскому фрейму.


В качестве альтернативы, не добавляйте свою собственную функцию. Используйте the standard one:

e.target.classList.contains("className"); 
Смежные вопросы