Ответ 1
Нет текущего способа сделать это.
Однако вы можете увеличить высоту и скрыть границы, таким образом, полоса прокрутки iframe не появится и документ окажется частью вашего сайта.
У меня есть iframe с опубликованным Google Doc. Содержимое этого документа может быть изменено, поэтому я хочу автоматически настроить высоту iframe на основе его содержимого. Я нашел некоторые решения для этого, но все они требуют доступа к главе дочернего документа. Кто-нибудь есть идея о том, как это сделать?
Вы можете просмотреть отрывок кода, который я использую ниже:
#faq{
height: 800px;
overflow: hidden;
position: relative;
width: 660px;
border-top: 1px solid #90C547;
border-bottom: 1px solid #90C547;
}
<div id="faq"><iframe id="faqif" src="https://docs.google.com/document/..../pub?embedded=true" frameborder="0" style="overflow:hidden;overflow-x:hidden;overflow-y:hidden;height:900px;width:832px;position:absolute;top:-92px;left:-150px;right:0px;bottom:0px;z-index:0;" height="900px" width="832px"></iframe></div>
Нет текущего способа сделать это.
Однако вы можете увеличить высоту и скрыть границы, таким образом, полоса прокрутки iframe не появится и документ окажется частью вашего сайта.
(извините)
Причина связана с кросс-доменной политикой (подробнее, информация) вы не можете получить дочерний документ iframe
и, следовательно, установить его height
, чтобы изменить размер iframe
соответственно, просто поместите
При вычислении политика одного и того же происхождения является важной концепцией в модель безопасности веб-приложений. Эта политика позволяет запускать скрипты страницы, происходящие из одного и того же сайта - комбинация схемы, имя хоста и номер порта - для доступа к DOM без конкретные ограничения, но препятствует доступу к DOM на разных сайты.
[...]
Если у вас нет контроля над сайтом в рамке, вы не можете обойти междоменная политика.
И если вы не можете сделать это, вы не можете делать то, что хотите, потому что нет способа определить высоту документа-документа.
Кажется, причина, по которой вы хотите это сделать, связана с дизайном. Таким образом, вы можете взглянуть на различные способы реализации контента (iframe) на своем сайте, причем очевидным является то, что естественное ограничение по высоте - высота просмотра в браузере, возможно поэтому делает iframe
100% окна просмотра ( html, body) высота? Хотя это будет мешать вашему дизайну, если на странице есть другие компоненты... но есть альтернативы... iframe
может:
Выровняйтесь по одной стороне страницы со 100% установленной высотой
Поместить в всплывающее или модальное окно со 100% высотой/шириной
Управляйте (JS), чтобы растягиваться с родительским окном, возможно, с фиксированным bottom
Также помните, что, поскольку это глобальное ограничение на этот вид контента, пользователи не полностью неиспользуются, чтобы увидеть его, хотя это не идеальный выбор дизайна, он не обязательно тот, который будет путать/удивлять посетителей вашего сайта.
Плохая новость заключается в том, что кросс-доменная политика не позволит вам делать это каким-либо образом. Я провел пару часов, пытаясь обойти, в том числе:
Лучший подход - использовать доступную библиотеку.
Загрузите ZIP со следующего URL-адреса и следуйте простым инструкциям по установке, написанным там.
http://davidjbradshaw.github.io/iframe-resizer/
Это выглядит многообещающим, но я не могу его сам проверить. Посмотрите на него и отправьте комментарии, если вам нужна помощь.
#faq{
position: relative;
width: 832px;
border-top: 1px solid #90C547;
border-bottom: 1px solid #90C547;
height: 100%
}
#faqif{}
.bgcolor_patch{position: absolute; right: 0; top:0; height: 100%; width: 20px; background: #fff; }
$(document).ready(function(){
$("iframe").load( function () {
var c = (this.contentWindow || this.contentDocument);
if (c.document) d = c.document;
var ih = $(d).outerHeight();
var iw = $(d).outerWidth();
$(this).css({
height: ih,
width: iw
});
});
});
<div id="faq"><iframe id="faqif" src="https://docs.google.com/document/..../pub?embedded=true" height="100%" width="832px" frameborder="0"></iframe>
<div class="bgcolor_patch"></div>
</div>
Первый ответ здесь работал у меня! Полноэкранный iframe с высотой 100%
<body style="margin:0px;padding:0px;overflow:hidden">
<iframe src="http://www.youraddress.com" frameborder="0"
style="overflow:hidden;height:100%;width:100%" height="100%"
width="100%">
</iframe>
</body>
У меня была такая же проблема. Вот решение. Вы должны установить тело 100% 100% высоты. Затем блок отображения iframe, 100% ширина 100% vh. Вот окончательный код. Извините, я не знаю, как поставить кодовый тег xd.
'body style = "margin: 0px; отступ: 0px; ширина: 100%; высота: 100%;" div style = "высота: 100%; ширина: 100%; отображение: блок;" iframe frameborder = "0" style = "высота: 100vh; ширина: 100%; отображение: блок;" width = "100%" height = "100%" src= "https://docs.google.com/spreadsheets/d/1SizkrPE97j1TouBmohPjCj0ZB-MxYQtRSKotHyxT8Y8/edit#gid=0"/iframe div
Нечто подобное было задано здесь: Показать всю длину документа для вставки документа Google
Решение состоит в том, чтобы либо использование <embed>
вместо <iframe>
или GET
документ с помощью запроса CORS и поместить его туда, куда вы хотите. Последний также позволяет стилизовать/изменить содержимое.
Хотя содержание внутри iframe, оно чрезмерно сложно (не невозможно, но, безусловно, нецелесообразно).
Но из-за политики CORS Google Docs вы можете использовать этот фрагмент кода, который я нашел в других местах на SO в какой-то момент в прошлом (сохранить его в комментарии к коду, извините, у меня нет указания авторства) для извлечения контента, и затем используйте его вне iframe - другими словами, используйте iframe только как способ сделать запрос, а затем отформатируйте сам контент. Затем вы можете обработать высоту полученного div как и любой другой.
<!--
// get all iframes that were parsed before this tag
var iframes = document.getElementsByTagName("iframe");
for (let i = 0; i < iframes.length; i++) {
var url = iframes[i].getAttribute("src");
if (url.startsWith("https://docs.google.com/document/d/")) {
// create div and replace iframe
let d = document.createElement('div');
d.classList.add("embedded-doc"); // optional
iframes[i].parentElement.replaceChild(d, iframes[i]);
// CORS request
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onload = function() {
// display response
d.innerHTML = xhr.responseText;
};
xhr.send();
}
}
-->