addEventListener, который слушает содержимое iframe - PullRequest
2 голосов
/ 15 ноября 2010

Справочная информация: Я написал букмарклет (JavaScript), который добавляет iframe к текущей странице, которую вы просматриваете.Атрибут src этого iframe указывает на форму в моем приложении.

Проблема: Я пытаюсь использовать addEventListener, чтобы определить, была ли отправлена ​​эта форма.Однако я не могу получить доступ к элементам внутри iframe.

Например:

document.getElementById(remote_form_id).addEventListener("submit",afterSubmit,true)

не работает, потому что вызов getElementByID возвращает ноль.

Мой текущий способ - добавить прослушиватель событий в iframe для прослушивания действия «load», а затем вызвать промежуточную функцию, которая увеличивает счетчик, потому что я знаю, сколько раз iframe будет загружен , прежде чем мне нужно вызвать afterSubmit ().

document.getElementById(marklet_iframe_id).addEventListener("load",listenForSubmit,true)

function listenForSubmit(){
    if (count==1){afterSubmit();}
    count++;
}

По сути, я ищу лучшую практику, потому что это дерьмовый подход.

Ответы [ 3 ]

0 голосов
/ 15 ноября 2010

Хотя это не работает в IE, вы можете захотеть взглянуть на postMessage метод оконных объектов страниц. Это позволяет асинхронно отправлять строковые данные между окнами, даже если прямой доступ будет запрещен политикой того же происхождения.

0 голосов
/ 15 ноября 2010

Попробуйте библиотеку EasyXDM , которая использует для этого самые лучшие методы в браузере данного пользователя. Кроме того, это «лучшая практика» в том смысле, что его цель - отправлять сообщения между окнами, и эти окна должны обрабатывать сообщения, что имитирует функцию postMessage, доступную в браузерах HTML5.

0 голосов
/ 15 ноября 2010

Вы можете сделать что-то вроде этого:

var doc = document.getElementById(marklet_iframe_id).contentDocument;
var form = doc.getElementById(formId)
form.addEventListener("submit", afterSubmit, true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...