Динамически создаваемый iframe не работает в Safari - PullRequest
1 голос
/ 12 июня 2010

У меня странная проблема, и я не нашел ответа в Google ... Я динамически создаю и заполняю на странице iframe с помощью jquery.Он отлично работает с FFF и IE, но не с Safari .

iframe создан, но пуст (сообщение «привет из iframe!» Отсутствует).Вот фрагмент кода, чтобы проиллюстрировать это:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-fr" lang="fr-fr" >
 <head>
  <title>iframe</title>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  <script type="text/javascript">
   $(document).ready(function() {

    var jFrame = $('<iframe id="myiframe" name="myiframe">');
    jFrame.css({'height':'40px','width':'200px'}).appendTo($('#container'));

    $('#myiframe').load(function() {
     jFrame.contents().find("body").html('greetings from the iframe !');
    });

   });
  </script>
 </head>
 <body>
  <div id="container"></div>
 </body>
</html>

Мне действительно интересно, почему iframe остается пустым с Safari.Кажется, что если "contents ()" не был правильно интерпретирован ...

Есть идеи?

1 Ответ

2 голосов
/ 12 июня 2010

Обязательно подключите обработчик события load, прежде чем он сможет сработать, например:

$('<iframe id="myiframe" name="myiframe" />')
  .css({'height':'40px','width':'200px'})
  .load(function() {
     $(this).contents().find("body").html('greetings from the iframe !');
  })
  .appendTo('#container');

При этом я не уверен, что событие load является обязательным для запуска, если не было фактической загрузки (ваш кадр не имеет src), все браузеры могут следовать спецификации здесь, но все еще будет противоречивым. Но ... Safari всегда был немного "выключен" с событиями load и ready, поэтому использование описанного выше подхода поможет этому как можно больше. Последнее замечание: .appendTo() может принимать селектор напрямую;)

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