Проблема JavaScript с iframe это скрыто, прежде чем загружено

У меня есть страница, которая содержит 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, который является чем-то, чего я определенно хочу избежать.

14
задан Aistina 28 April 2010 в 13:54
поделиться

2 ответа

Некоторые браузеры предполагают, что когда "display: none" применяется к заменяемым элементам (например, Flash или iframe), визуальная информация для этого элемента больше не требуется. . Таким образом, если элемент позже отображается с помощью CSS, браузер фактически воссоздает пустую форму визуальных данных.

Я полагаю, что для iframe по умолчанию установлено «display: none;» заставляет браузер пропускать рендеринг HTML, поэтому теги не имеют размеров. Я бы установил видимость на «скрытую» или разместил бы ее за пределами страницы, а не использовал бы «display: none;».

Удачи.

13
ответ дан 1 December 2019 в 13:58
поделиться

вместо того, чтобы сделать iframe невидимым с помощью display: none , вы можете попробовать ...

... установить видимость: скрыта

... установить положение: абсолютное; top: -600px;

... set opacity: 0

или что-то еще, что заставляет jQuery «видеть» объекты, но не пользователя (и сбрасывать используемые css-атрибуты в вашем myFrame .onload функция).

7
ответ дан 1 December 2019 в 13:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: