Предполагая, что у меня нет контроля над содержимым в iframe, есть ли способ обнаружить изменение src в нем через родительскую страницу? Может, какая-то нагрузка?
Мое последнее средство - сделать 1-секундный интервальный тест, если iframe src такой же, как и раньше, но выполнение этого хакерского решения будет неудачным.
Я использую библиотеку jQuery, если это поможет.
javascript
jquery
iframe
onload
Matrym
источник
источник
src
изменяться свойство при нажатии на ссылку в iframe? Я не уверен в этом - если бы мне пришлось угадывать, если бы сказал «нет». Там являются способы свойств монитора (в Firefox по крайней мере , AFAIK) , но я не уверен , будет ли какое - либо использование в данном случае.src
атрибут в DOM не изменяется в последних версиях FireFox или Safari. @ Ответ Мичиэля ниже настолько хорош, насколько я смог получить до сих пор.Ответы:
Вы можете использовать
onLoad
событие, как в следующем примере:Оповещение будет всплывать всякий раз, когда изменяется местоположение в iframe. Он работает во всех современных браузерах, но может не работать в некоторых очень старых браузерах, таких как IE5 и ранняя версия Opera. ( Источник )
Если iframe показывает страницу в том же домене родительского объекта , вы сможете получить доступ к местоположению с помощью
contentWindow.location
, как в следующем примере:источник
this.contentWindow.location.href
получуPermission denied to access property 'href'
this.contentWindow.location
доступно для других доменов. Дажеthis.contentWindow.location.href
доступно для других доменов, но только для записи. Однако чтениеthis.contentWindow.location.href
ограничено тем же доменом.Ответ основан на JQuery <3
Как упоминалось в subharb, начиная с JQuery 3.0 это необходимо изменить на:
https://jquery.com/upgrade-guide/3.0/#breaking-change-load-unload-and-error-removed
источник
if (counter > 1) { // do something on iframe actual change }
(предполагается , что счетчик был установлен на 0 при старте)Если у вас нет контроля над страницей и вы хотите наблюдать за изменениями, то современный метод заключается в использовании
MutationObserver
Пример его использования, отслеживание изменения
src
атрибутаiframe
Выход через 3 секунды
На jsFiddle
Отправленный ответ здесь как оригинальный вопрос был закрыт как дубликат этого.
источник
observe
. Это всего лишь пример.Примечание . Фрагмент будет работать только в том случае, если iframe имеет одинаковое происхождение.
Другие ответы предлагали
load
событие, но оно срабатывает после загрузки новой страницы в iframe. Вам может потребоваться уведомление сразу после изменения URL-адреса , а не после загрузки новой страницы.Вот простое решение JavaScript:
Это будет успешно отслеживать
src
изменения атрибутов, а также любые изменения URL, сделанные внутри самого iframe.Проверено во всех современных браузерах.
Я сделал суть с этим кодом, а также. Вы можете проверить мой другой ответ тоже. Это немного углубляется в то, как это работает.
источник
Iframe всегда сохраняет родительскую страницу, вы должны использовать это, чтобы определить, на какой странице вы находитесь в iframe:
HTML-код:
Js:
источник
Начиная с версии 3.0 Jquery вы можете получить ошибку
Который можно легко исправить, выполнив
источник
Вот метод, который используется в модулях Commerce SagePay и Commerce Paypoint Drupal, который в основном сравнивается
document.location.href
со старым значением, сначала загружая его собственный iframe, а затем внешний.В общем, идея состоит в том, чтобы загрузить пустую страницу как заполнитель со своим собственным JS-кодом и скрытой формой. Затем родительский JS-код отправит эту скрытую форму, где он
#action
указывает на внешний iframe. Как только происходит перенаправление / отправка, код JS, который все еще работает на этой странице, может отслеживатьdocument.location.href
изменения вашего значения.Вот пример JS, используемый в iframe:
А вот JS используется на родительской странице:
Затем во временную пустую целевую страницу необходимо включить форму, которая будет перенаправлять на внешнюю страницу.
источник