Каким образом можно вставить содержимое в iframe, если у него не указан src?

Как вставить содержимое, полученное через прокси-сервер, в iframe? Будут ли работать ссылки через прокси-сервер, находящиеся внутри iframe? 

Вот пример кода, который использует функцию fetchProxy для получения страницы через прокси:

```
fetchProxy(url, options, i) {
  const proxies = (options || {}).proxies || [
    'https://cors-anywhere.herokuapp.com/',
    'https://yacdn.org/proxy/',
    'https://api.codetabs.com/v1/proxy/?quest='
  ]
  return fetch(proxies[i] + url, options).then(res => {
    if (!res.ok)
      throw new Error(`${res.status} ${res.statusText}`);
    return res
  }).catch(error => {
    if (i === proxies.length - 1)
      throw error
    return this.fetchProxy(url, options, i + 1)
  })
}
```
  • 23 ноября 2023 г. 7:53
Ответы на вопрос 2
Чтобы вставить содержимое в iframe, у которого не указан src, можно воспользоваться методом `document.write()`. Вот пример кода:

```
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);

var iframeDocument = iframe.contentWindow.document;
iframeDocument.open();
iframeDocument.write('<html><body>Содержимое, которое нужно вставить</body></html>');
iframeDocument.close();
```

Чтобы вставить содержимое, полученное через прокси-сервер, в iframe, можно использовать функцию fetchProxy из приведенного вопросе примера. Вот как это можно сделать:

```
fetchProxy(url, {mode: 'cors'})
  .then(response => response.text())
  .then(html => {
    var iframe = document.createElement('iframe');
    document.body.appendChild(iframe);

    var iframeDocument = iframe.contentWindow.document;
    iframeDocument.open();
    iframeDocument.write(html);
    iframeDocument.close();
  })
  .catch(error => {
    console.error('Ошибка:', error);
  });
```

Если внутри iframe находятся ссылки, определенные через прокси-сервер, они не будут работать, так как iframe будет загружать и отображать содержимое с прокси-сервера, а не с исходного URL. Чтобы ссылки внутри iframe работали через прокси-сервер, нужно внутри содержимого iframe изменить все ссылки, добавив префикс прокси-сервера. Например:

```html
<html>
<body>
  <a href="https://example.com">Ссылка на внешний ресурс</a>
  <a href="/page">Ссылка на внутреннюю страницу</a>

  <script>
    var links = document.getElementsByTagName('a');
    var proxyServer = 'https://cors-anywhere.herokuapp.com/';
    for (var i = 0; i < links.length; i++) {
      var link = links[i];
      var href = link.getAttribute('href');
      link.setAttribute('href', proxyServer + href);
    }
  </script>
</body>
</html>
```

После таких изменений ссылки внутри iframe будут отправлять запросы через прокси-сервер и получать соответствующие ответы.
Как вставить содержимое в iframe без src? Используйте следующий подход:

1. Создайте на странице пустой iframe.
2. Получите ссылку на document внутри созданного iframe.
3. Вставьте необходимые данные внутрь document, используя метод document.write().

Будут ли работать при таком решении ссылки через proxy, которые находятся внутри iframe?

Для ссылок внутри iframe, которые находятся в рамках того же домена, решение будет работать без проблем. Однако, если ссылка ведет на другой домен, работоспособность будет зависеть от настройки CORS (Cross-Origin Resource Sharing) сервера.
Похожие вопросы