* Объедините <iframe>с родительским телом, используя только 1 полосу прокрутки для всей страницы, всегда корректируя по высоте - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь сделать что-то, что не должно быть очень трудным, но удивительно, что я не смог найти решение в Интернете.

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

Это мой код:

<h1>Tours</h1>

<div style="background-color: red; color: white; padding: 200px; text-align: center;">
    Top part of page
</div>

<iframe id="tourtask-iframe" style="overflow: hidden;" src="/public/index.php?b=eit&token=abcd1234&p=tours&lang=en">Please upgrade to a browser that supports iframes.</iframe>

<style>
body, html {
    width: 100%;
    height: 100%;
    margin: 0;
}

#tourtask-iframe {
    width: 100%;
    height: 2000px;
    border: none;
}
</style>

Когда я делаю overflow: hidden; в теле исходного файла архива iframe, полоса прокрутки исчезает, но я не могупрокрутите часть страницы iframe.

Мне нужно обновить высоту элемента iframe, чтобы заполнить 100% высоты этого файла.Мне также необходимо обновлять высоту элемента iframe всякий раз, когда я раскрываю / сворачиваю любое свернутое содержимое во фрейме.

Как это можно сделать?Или есть лучший способ?

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

Спасибо!

1 Ответ

0 голосов
/ 03 февраля 2019

Я нашел удивительный скрипт для этого iFrame Resizer: https://davidjbradshaw.github.io/iframe-resizer/

Он чувствует любое изменение высоты исходного документа iframe и соответствующим образом обновляет контейнер iframe.Чтобы заставить его работать, потребовались некоторые настройки и исследования.

Убедитесь, что вы соответствуете следующим требованиям:

  1. Исходный документ iframe должен начинаться с <!DOCTYPE html>.
  2. Убедитесь, что тело документа iframe не на 100% (что по умолчанию, например, при использовании Material Design).

Для успешного внедрения корректного изменения размераiframe для родительского документа, теперь я использую следующий код:

<iframe id="tourTaskIframe" scrolling="no" src="/public/index.php?b=eit&token=abcd1234&p=tours&lang=en">Please upgrade to a browser that supports iframes.</iframe>
<script type="text/javascript" src="/public/js/iframeResizer.min.js"></script>
<script type="text/javascript" src="/public/js/iframeConfig.js"></script>
<link rel="stylesheet" type="text/css" href="/public/css/iframe-parent.css">

iframeConfig.js:

iFrameResize({
    heightCalculationMethod : 'bodyOffset'
}, '#tourTaskIframe');

iframe-parent.css:

iframe{
    width: 1px;
    min-width: 100%;
    border: none;
}

body {
    margin: 0;
}

В файле styles.css для исходного документа iframe, помимо любых других стилей, которые я использую для эстетики, у меня есть следующие основные строки:

body {
    height: auto !important; /* Essential for resizing */
    min-height: 0 !important; /* Essential for resizing */  
}

И все!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...