Как можно определить адрес веб-страницы, которая отображается внутри элемента iframe?

Как можно определить URL веб-страницы, которая загружена внутри элемента iframe на "моей странице"?
  • 5 декабря 2023 г. 11:20
Ответы на вопрос 2
Для получения URL веб-страницы, загруженной в элемент `iframe`, вы можете воспользоваться свойством `src` самого элемента `iframe`, если хотите получить исходный адрес (начальный URL), который был установлен для `iframe`. Однако если внутри `iframe` происходила навигация (пользователь перешел по ссылкам, в результате чего адрес изменился), получение текущего адреса может быть ограничено политикой одного источника (same-origin policy).

Для доступа к исходному URL, используйте JavaScript:

```javascript
// получаем элемент iframe по id
var iframe = document.getElementById('myIframe');

// получаем URL iframe
var url = iframe.getAttribute('src');

console.log(url);
```

Чтобы получить текущий URL содержимого `iframe` (если это возможно):

```javascript
var iframe = document.getElementById('myIframe');

// Попытка получить текущий URL из содержимого iframe
try {
  var currentUrl = iframe.contentWindow.location.href;
  console.log(currentUrl);
} catch (e) {
  console.error(e);
}
```

Этот код может не сработать, если `iframe` загружает содержимое с другого источника (домена), отличного от того, на котором расположена ваша страница, из-за политики безопасности браузеров same-origin policy, которая запрещает скриптам на одном источнике (домене) доступ к свойствам документа на другом источнике (домене).

Если `iframe` загружает содержимое с того же источника, что и ваша страница, текущий URL должен быть успешно получен.

В случае, если `iframe` загружает страницу с другого домена, и вы хотите получить текущий URL после навигации, нужно использовать механизмы взаимодействия между документами, такие как window.postMessage. Для этого вам потребуется добавить код на странице внутри `iframe`, который отправляет текущий URL обратно на родительский документ через `postMessage`. Однако, это подразумевает, что у вас есть возможность внести изменения в страницу, загруженную внутри `iframe`.

И не забывайте, что использование `postMessage` требует предусмотреть обработку сообщений и в родительском документе:

```javascript
// Обработка полученного сообщения
window.addEventListener('message', function(event) {
  // Проверка источника сообщения
  if (event.origin !== "http://домен-с-iframe.com") {
    return; // или какая-то обработка для безопасности
  }
  console.log('Текущий URL в iframe:', event.data);
});
```

Таким образом, документ внутри `iframe` должен отправить сообщение следующим образом:

```javascript
// Отправляем текущий URL в родительский документ
window.parent.postMessage(window.location.href, "http://домен-родителя.com");
```
document.getElementById("iframe_id").contentWindow.location.hrefилиdocument.getElementById("iframe_id").srchttps://stackoverflow.com/a/12069199
Похожие вопросы