HTML5 способ вызова родительской функции JavaScript из iFrame - кроме использования postMessage?Или решение для приложений PhoneGap? - PullRequest
4 голосов
/ 13 января 2012

Нам известно о междоменных ограничениях, накладываемых на межоконный обмен данными, и введении postMessage в HTML5.

Однако нам интересно, есть ли другие способы, с помощью которых iFrame может вызывать функции JavaScript, определенные в его родительском окне.

Мы находим postMessage немного неуклюжим для вызова нескольких методов, каждый из которых требует нескольких параметров.

Если альтернатив HTML5 не существует, начисляются бонусные баллы за предложение решения в PhoneGap.

Подробности PhoneGap здесь:

Мы встраиваем iFrame в страницу "index.html" PhoneGap.

Из «index.html» мы можем вызывать функции JavaScript или обращаться к переменным в iFrame.

Но мы не можем вызывать функции или обращаться к переменным в "index.html" из iFrame.

Есть ли что-то в PhoneGap, что мешает работать в обратном порядке?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 13 января 2012

Альтернативой postMessage является изменение хештега URL. Нетрудно кодировать более сложные сообщения в сообщении JSON и кодировать / декодировать текст:

{"methodName": ['a', 'b', 3]}

Становится: #% 7B% 22methodName% 22% 3A% 20% 5B'a '% 2C% 20'b'% 2C% 203% 5D% 7D

Если у вас на другой стороне есть скрипт, который следит за изменением хэша и обрабатывает сообщения, то все готово.

Обратите внимание, что тот же прием может прекрасно работать с postMessage в браузерах, которые его поддерживают. Популярный способ сделать это - использовать postMessage и вернуться к изменению хеша.

0 голосов
/ 13 января 2012

parent.funcitonName(args); прекрасно работает для меня. Я не уверен, что если есть междоменные проблемы, я делаю весь код iFrame на одном домене.

...