Сообщаем, когда iframe находится на новом URL - PullRequest
1 голос
/ 04 августа 2009

Я использую JavaScript для создания небольшого приложения iframe, и я не могу найти способ обновить URL в моей строке URL, которую я создал, когда кто-то нажимает на ссылку внутри iframe.

Это должно быть мгновенным, и желательно без проверки каждую миллисекунду, изменилось ли значение document.getElementById ('idofiframe'). Src.

Кажется, я не могу найти простое свойство, чтобы сказать, когда изменился URL, поэтому, если его нет, решение этой проблемы также будет работать программно.

Спасибо за помощь!

Ответы [ 4 ]

1 голос
/ 04 августа 2009

Вы можете добавить событие onload в iframe, а затем отслеживать его - оно будет выдано, когда фрейм завершит загрузку (хотя, конечно, это может быть тот же URL снова ...)

1 голос
/ 04 августа 2009

Это будет трудно сделать, потому что это считается xss, и большинство браузеров блокируют это.

Скорее всего, есть обходные пути, связанные с AJAX.

1 голос
/ 04 августа 2009

Прежде всего, то, что вы хотите сделать, будет возможно, только если источник вашего iframe указывает на тот же домен, что и родительское окно. Так что если у вас есть страница page.html, которая создает другую страницу iframed.html, то они оба должны находиться в одном домене (например, www.example.com/page.html и www.example.com/iframed.html).

Если это так, вы можете сделать следующее на странице iframed.html:

<script type="text/javascript">
window.onload = function() {
    var links = document.getElementsByTagName('a');
    for (var i=0, link; link = links[i]; i++) {
        link.onclick = function() {
            window.parent.location.href = '#' + encodeURIComponent(this.href);
        }
    }
}
</script>

Это будет сделано для того, чтобы при каждом нажатии на ссылку в iframed.html строка URL-адреса помещала URL-адрес ссылки в «хэш-тег» URL-адреса (например, www.example.com/page.html). # HTTP% 3A% 2F% 2Fwww.example.com% 2FanotherPage.html)

Очевидно, что вы должны иметь такой скрипт на каждой странице, которая должна отображаться внутри iframe.

Как только это произойдет, вы можете поместить этот фрагмент внутрь page.html, и тогда iframe автоматически загрузит URL в хеш-тег:

window.onload = function() {
    var url = window.location.hash.substr(1);
    if (url) {
        document.getElementById('iframe').src = url;
    }
}

К сожалению, я не запускал этот код для его тестирования, но он довольно прост и должен объяснить идею. Дайте мне знать, как это происходит!

0 голосов
/ 04 августа 2009

Вместо этого, вы можете добавить код к содержимому фрейма, чтобы он вызывал событие для фрейма контейнера?

В IE событие OnReadyStateChanged может дать вам то, что вы хотите.

...