событие загрузки iframe

#javascript #html #css #iframe

#javascript #HTML #css #iframe

Вопрос:

У меня есть страница, которая имеет структуру, подобную этой;

 <body onLoad="LoadPage()">
        <iframe src="pg1.html">
      <p>Your browser does not support iframes.</p>
    </iframe>
    <iframe src="about:blank">
      <p>Your browser does not support iframes.</p>
    </iframe>
    </body>
  

Теперь при загрузке тела я устанавливаю значение «src» для 2-го iframe.
Если я вызываю body onload, функция, похоже, вызывается дважды…Итак, есть ли какой-либо другой способ, с помощью которого я могу вызвать функцию для установки src..

 <script type="text/javascript"> 
        function LoadPage(){
            var pdfVal = document.forms[0].pdf_val.value;
            document.getElementById('ipad_pdf_link').href = pdfVal; 
        }
        </script>
  

Комментарии:

1. показать LoadPage() и другие скрипты

Ответ №1:

Я не уверен, почему оно загружается дважды, но вы можете вместо того, чтобы делать это на onLoad , использовать jQuery:

 <script> 
function loadPage() {
    var pdfVal = $("name=[pdf_val]").val();
    $('#ipad_pdf_link').attr("src", pdfVal); 
}

$(function() { // called when the page finishes loading
    loadPage();
});
</script>
  

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

Ссылка:

Ответ №2:

Вы могли бы поместить

 <script type="text/javascript"> 
    LoadPage();
</script>
  

В нижней части HTML, а не в событии onload, и оно все равно будет вызвано, когда страница завершит загрузку.

Комментарии:

1. Спасибо за это .. На самом деле есть 2 вещи … 1) Загрузка страницы главной страницы … и 2) загрузка страницы iframe.. Итак, я должен использовать одно и то же для обоих мест?

2. Почему это не очень хорошая практика? В любом случае я хочу, чтобы функция запускалась после того, как DOM будет готов..

3. Загрузка означает загрузку также всех файлов JS, поэтому иногда вам нужно сначала запустить код важных файлов js, а затем должен выполняться ваш код, поэтому лучше вызвать как $(function() {}

Ответ №3:

Загрузка дважды, скорее всего, связана с этим:http://msdn.microsoft.com/en-us/library/ie/hh180173(v=vs.85).aspx

У меня есть случай, когда IE9 дважды вызывает функцию init, когда она установлена с помощью <body onload="x()"> . У нас есть система, в которой наши старые asp-страницы запускаются в iframe, и их десятки. Все они используют один и тот же старый синтаксис. Первый вызов init выполнен правильно, но второй выполняется как самый верхний. Это в основном все портит, потому что в iframe window.top нет функций, которые должны быть, потому что это само окно iframe. В IE8, режиме IE8 в IE9, Chrome и Firefox это работает нормально.