JQuery и фреймы - $ (document) .ready не работает - PullRequest
15 голосов
/ 21 октября 2008

У меня есть страница с кодом в js и jQuery, и она работает очень хорошо. Но, к сожалению, весь мой сайт очень очень старый и использует фреймы. Поэтому, когда я загружаю свою страницу в рамку, $(document).ready() не запускается.

Мой набор фреймов выглядит так:

<frameset rows="79,*" frameBorder="1" frameSpacing="1" bordercolor="#5996BF" noresize> 
    <frame name="header" src="Operations.aspx?main='Info.aspx'" marginwidth="0" marginheight="0" scrolling="no" noresize frameborder="0">
    <frame name="main" src="Info.aspx" marginwidth="0" marginheight="0" scrolling="auto" noresize frameborder="0">      
</frameset>

Моя страница загружена в рамку main. Что мне делать?

Ответы [ 12 ]

7 голосов
/ 17 июня 2010

Я пробовал метод, упомянутый в другом комментарии:

$("#frameName").ready(function() {
    // Write you frame on load javascript code here
} );

и у меня это не сработало.

это сделал:

$("#frameName").load( function() {
     //code goes here
} );

Несмотря на то, что событие запускается не так быстро, оно ожидает, пока изображения и css также загрузятся.

3 голосов
/ 04 июля 2012

Я знаю, что это старая тема. Но чтобы помочь некоторым из вас, кто зашел на эту страницу, вот мое решение:

$($("#frameName")[0].contentWindow.document).ready(function() {
    // Write you frame onready code here
});
2 голосов
/ 28 января 2009

Полагаю, это аналогичная проблема, с которой я столкнулся при использовании DOMContentLoaded в iframe

Я написал сообщение в блоге об этом .

2 голосов
/ 27 ноября 2008

Если вы хотите запустить событие onload для своих кадров, выполните следующие действия:

  1. Назначьте id и name каждому тегу <frame>. Убедитесь, что значения атрибутов id и name совпадают.

  2. Используйте следующий код для запуска события onload кадра:

    $("frameName").ready(function() { 
      // Write your frame onload code here
    }
    
1 голос
/ 08 июня 2012

Я долго работал с этим постом ... вот мое решение.

test.html

<!DOCTYPE HTML>
<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>

    <script>        
      document.write('<frameset><frame name="frame_content" id="frame_content"></frame></frameset>');

      $('#frame_content').attr('src', 'test2.html');
      $('#frame_content').load(function()
      {
        if('${"#header"}' != '') {
          $("#header", frame_content.document).remove();
        }
      });
      if($('#frame_content').complete) $('#frame_content').trigger("load");
    </script>

</head>
</html>

test2.html

<!DOCTYPE HTML>
<html>

  <head>
  </head>

  <body>
    <div id="header">You will never see me, cause I have been removed!</div>
  </body>
</html>
1 голос
/ 31 января 2012

У меня тоже сработало следующее:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<script>
$(window.parent.frames[0].document).ready(function() {
    // Do stuff
});
</script>

[0] указывает, что это первый кадр в документе, [1] будет вторым кадром и т. Д. Это особенно хорошо, если у вас нет контроля над наценкой, и он все еще использует готовый документ.

1 голос
/ 21 октября 2008

Вы пытались поместить код jQuery на страницу Info.aspx?

0 голосов
/ 28 февраля 2016

Этот ответ может быть поздно, но этот ответ может помочь кому-то, как я ...

Это можно сделать с помощью собственного кода Javascript -

ifrm2 = var ifrm2 = document.getElementById('frm2');
if (ifrm2.contentDocument.readyState == 'complete') {
  //here goes the code after frame fully loaded
}

 //id = frm2 is the id of iframe in my page
0 голосов
/ 26 ноября 2014

Нет необходимости изменять разметку. Просто исправьте селектор. Должно быть:

$("frame[name='main']").ready(function(){..}); 

не

$("#frameName").ready(function(){..}); 

Примечание. Похоже, событие готовности jQuery срабатывает несколько раз. Убедитесь, что с вашей логикой все в порядке.

0 голосов
/ 22 октября 2008

Не уверен, что вы пытаетесь сделать, но у меня есть еще более старое классическое asp-приложение, которое работает вне фреймов, и я недавно добавил функциональность jQuery, и она отлично работает. $ (Document) .ready () прекрасно работает в пределах фрейма, но если вы хотите сослаться на DOM в другом фрейме, вам придется использовать событие onload фрейма, чтобы сообщить вам, когда загружается DOM фрейма. Правда, я использовал iFrames, но концепция должна быть такой же.

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