Как я могу получить ввод от пользователя во внедренном iframe?

Как получить доступ к input в iframe video player, когда нет доступа к сайту, откуда загружается iframe? Я пробовал использовать iframe.contentDocument, но получил null в консоли. Также, после загрузки я попытался вывести данные в консоль и получил ошибку DOMException: Blocked a frame with origin "http://127.0.0.1:5500" from accessing a cross-origin frame.
    at HTMLIFrameElement.<anonymous> (http://127.0.0.1:5500/script.js:4:72). Как можно получить данные из iframe? Я слышал о postMessage, можете ли вы подсказать, как использовать его для этого?
  • 12 октября 2023 г. 7:18
Ответы на вопрос 3
Ошибка DOMException: Blocked a frame with origin "http://127.0.0.1:5500" from accessing a cross-origin frame означает, что вы не можете получить доступ к содержимому iframe на другом домене или порте из-за политики same-origin. Это ограничение сделано из соображений безопасности, чтобы предотвратить доступ к содержимому других сайтов без их разрешения.

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

1. В странице, содержащей iframe, добавьте обработчик события на сообщения, отправленные из iframe:

```javascript
window.addEventListener('message', function(event) {
  // Обрабатывайте полученные сообщения здесь
  console.log(event.data);
});
```

2. В iframe, отправьте сообщение на страницу, содержащую iframe, используя метод `postMessage`:

```javascript
// Получение ссылки на родительское окно
var parentWindow = window.parent;

// Отправка сообщения на родительскую страницу
parentWindow.postMessage('Привет от iframe', 'http://domain.com');
```

В методе `window.postMessage`, первый параметр - это сообщение, которое вы хотите отправить, а второй параметр - это домен родительской страницы. Если вы не хотите указывать домен явно, вы можете использовать знак '*', чтобы разрешить сообщения из любого домена.

3. В странице, содержащей iframe, вы можете проверить источник сообщения и обработать его в соответствии с этим:

```javascript
window.addEventListener('message', function(event) {
  // Проверка источника сообщения
  if (event.origin === 'http://domain.com') {
    // Обрабатывайте полученные сообщения здесь
    console.log(event.data);
  }
});
```

Таким образом, вы можете обмениваться данными между страницей, содержащей iframe, и самим iframe с помощью метода postMessage, даже если они находятся на разных доменах.
Правильно использовать символы 
 чтобы разделить советы и не добавлять ненужные слова
Похожие вопросы