Установите iframe на высоту содержимого для удаленного содержимого

StackOverflow https://stackoverflow.com/questions/466672

  •  19-08-2019
  •  | 
  •  

Вопрос

На вопрос о том, как сделать так, чтобы ваш iframe соответствовал 100% вашему контенту (используя JavaScript), на форуме уже был дан ответ... для iframes, отображающих содержимое только из того же домена.

Мои вопросы:Можно ли изменить размер iframe в соответствии с содержимым, когда атрибут iframe src предназначен для страницы за пределами домена страницы, содержащей фрейм?Функции безопасности браузера, связанные с межсайтовыми сценариями, не позволяют мне получить доступ к объекту document для iframe.

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

Пожалуйста, обратите внимание, что я ищу решение на стороне клиента.

Ответы:


Дэйв

Проблема все еще существует - я не знаю высоту удаленного документа заранее, поэтому я не могу установить ее из базы данных или значения строки запроса.


дусофт

100% для iframe в CSS не установит его равным 100% содержимого внутри iframe, но относительно страницы или содержащего элемента (т. Е. div или чего-то еще).

Это было полезно?

Решение

(Мой ответ на аналогичный вопрос)

Это так это невозможно чтобы сделать это без какого-либо контроля над страницей, которая создается в iframed из-за модели безопасности браузера.Если бы это было возможно, это было бы проблемой безопасности и должно было бы быть исправлено.

Хотя предоставление сайту встраивания информации о высоте сторонней веб-страницы при встраивании на страницу кажется безвредным, это может привести к утечке на сайт встраивания информации, которую пользователь браузера хочет сохранить в тайне.Например, http://www.facebook.com/ отображается по-разному в зависимости от того, вошли вы в систему или нет, поэтому, если мой веб-сайт может определить высоту <iframe src="http://www.facebook.com/"> тогда я смогу выяснить, являетесь ли вы пользователем Facebook или нет, о чем вы, вероятно, не хотите, чтобы я знал.

Утечка информации была бы аналогична печально известному Утечка истории CSS какие поставщики браузеров должны были подключить.

Другие советы

Можно ли изменить размер iframe в соответствии с содержимым, когда атрибут iframe src предназначен для страницы за пределами домена страницы, содержащей фрейм?

Можно обойти межсайтовое ограничение и установить iframe на высоту его содержимого, но заставить его работать может быть немного неудобно.

Решение включает в себя работу в обход модели безопасности путем создания самим iframed содержимым iframe страницы на том же сервере, что и родительская страница, с которой оно может взаимодействовать.Я уже отвечал на подобный вопрос раньше здесь, в котором довольно подробно рассказывается о тонкостях настройки всего этого.

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

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

Должно ли изменение размера производиться с помощью скрипта?Вы могли бы перенаправить на страницу, где размер iframe взят из строки запроса, или базы данных, или файла конфигурации и т.д.

как насчет использования 100% в CSS?полосы прокрутки можно отключить в iframe, но тогда пользователь не сможет прокручивать.

это предотвращение JS / XSS, так что преодолейте это и попробуйте извлечь контент на стороне сервера и обслуживать его через локальное соединение.

Это теоретически, поскольку я это не тестировал:

1) PHP сохраняет удаленную страницу в локальный html-файл, используя file_get_content() или используя CURL.2) Javascript загружает локальный файл в iframe - теперь он локальный, и проблемы безопасности не применяются.

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

Кават:у вас нет способа узнать URL-адреса для изменений страницы на удаленной странице, поэтому вы можете использовать этот метод только на первой странице.Если все удаленные страницы имеют одинаковую высоту, это не проблема.

не самые лучшие решения, но вы можете попробовать:

javascript для написания iframe, в приложении iframe установите текущую высоту в URL #h700 для 700px и т. Д;затем используйте цикл для прослушивания этого изменения на хост-сайте "в javascript", чтобы прочитать src="url#h700" и установить по нему высоту iframe.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top