У меня есть страница, которая содержит iframe
это загружается с помощью JavaScript:
index.html
<iframe id="myFrame" width="800" height="600" style="display: none;"></iframe>
<div id="loader"><!-- some loading indicator --></div>
<script type="text/javascript">
function someFunction() {
var myFrame = document.getElementById('myFrame');
var loader = document.getElementById('loader');
loader.style.display = 'block';
myFrame.src = 'myFrame.html';
myFrame.onload = function() {
myFrame.style.display = 'block';
loader.style.display = 'none';
};
}
</script>
Страница, которая загружается в iframe
содержит некоторую логику JavaScript, которая вычисляет размеры определенных элементов в целях добавить JS управляемая полоса прокрутки (jScrollPane + Размеры jQuery).
myFrame.html
<div id="scrollingElement" style="overflow: auto;">
<div id="several"></div>
<div id="child"></div>
<div id="elements"></div>
</div>
<script type="text/javascript">
$(document).load(function() {
$('#scrollingElement').jScrollPane();
});
</script>
Это работает в Chrome (и вероятно другие браузеры WebKit), но перестало работать в Firefox и IE потому что в то время jScrollPane
назван, все элементы все еще invisble, и Размеры jQuery не может определить размеры любого элемента.
Есть ли способ удостовериться мой iframe
видимо прежде $(document).ready(...)
назван? Кроме использования setTimeout
задержаться jScrollPane
, который является чем-то, чего я определенно хочу избежать.
Некоторые браузеры предполагают, что когда "display: none" применяется к заменяемым элементам (например, Flash или iframe), визуальная информация для этого элемента больше не требуется. . Таким образом, если элемент позже отображается с помощью CSS, браузер фактически воссоздает пустую форму визуальных данных.
Я полагаю, что для iframe по умолчанию установлено «display: none;» заставляет браузер пропускать рендеринг HTML, поэтому теги не имеют размеров. Я бы установил видимость на «скрытую» или разместил бы ее за пределами страницы, а не использовал бы «display: none;».
Удачи.
вместо того, чтобы сделать iframe невидимым с помощью display: none
, вы можете попробовать ...
... установить видимость: скрыта
... установить положение: абсолютное; top: -600px;
... set opacity: 0
или что-то еще, что заставляет jQuery «видеть» объекты, но не пользователя (и сбрасывать используемые css-атрибуты в вашем myFrame .onload
функция).