动态创建的iframe无法在Safari上运行

时间:2010-06-12 18:49:34

标签: jquery iframe safari

我有一个奇怪的问题,我在谷歌上找不到答案...我动态创建并在页面上用jquery填充iframe。它适用于FF和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中保持空白。似乎“内容()”没有得到很好的解释......

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

确保在可能触发之前附加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事件是必需可能遵循这里的规范,但仍然不一致。但是......对于loadready事件,Safari总是有点“关闭”,因此使用上述方法将尽可能地帮助它。最后一点,.appendTo()可以直接选择选择器;)