Как получить обновление внутри iframe из родительского документа? - PullRequest
2 голосов
/ 30 октября 2011

Вот случай: у нас есть страница загрузки файла.Мы не хотели перезагружать страницу после завершения загрузки, поэтому мы поместили форму в iframe.Форма внутри iframe отправляет самому себе и возвращает json, когда это будет сделано.Как мы можем захватить этот ответ?Когда загрузка завершена, iframe перезагружается, иными словами, как мы фиксируем, когда iframe перезагружается?

Предположим, что:

  • мы не можем ничего напечатать / вернуть, кромеобъект json (поэтому нет js-кода для вызова функции в родительском документе.)
  • мы не можем использовать ajax, поскольку вы не можете публиковать файлы с использованием ajax
  • , мы не можем добавлять код javascript внутри iframe, потому чтокак только форма внутри iframe отправлена, страница перезагружается, и мы теряем добавленный код js.

Любые идеи?

ОБНОВЛЕНИЕ - Похоже наРешение очень простое (найдено где-то в сети):

<iframe onload="alert(window['upload_iframe'].document.body.innerHTML);"  ...></iframe>

Таким образом, оно будет запускать оповещение при каждой перезагрузке страницы внутри iframe.Теперь нужно просто отличить объект JSON от HTML-кода, что довольно просто.Спасибо всем за отличные советы!

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

Вы пытались добавить прослушиватель "onload" к элементу iframe, чтобы увидеть, срабатывает ли при изменении источника iframe? Это может быть решением. Если это не сработает, то я не думаю, что у вас есть выбор, кроме как выполнить функцию верхнего уровня из результата iframe.

обновление

Поскольку у вас нет контроля над ответом от сервлета, возможно, вы могли бы создать медиану PHP, которая связывается с сервлетом и принимает сырой json, который он получает, а затем возвращает то, что ему нужно для выполнения функции javscript родительского окна и передавая JSON этой функции.

Таким образом, вы контролируете выход.

0 голосов
/ 30 октября 2011

Вы можете проверить, изменилось ли содержимое iFrame, выполнив синхронизированную проверку внутреннего текста документа iFrame с тем, что было в прошлый раз, когда вы проверяли (или его хэш, если документ большой), а затем один разон изменился, вы можете попробовать проанализировать содержимое как JSON, чтобы проверить, что это ожидаемый ответ.

В качестве альтернативы вы можете использовать AJAX, чтобы проверить, завершена ли загрузка на стороне сервера, и как только сервер подтвердит, что она завершиласьпосле загрузки вы можете проверить содержимое iFrame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...