2009-11-02 47 views
0

我的目標是動態創建iframe並使用jQuery將廣告JavaScript寫入其中(例如Google AdSense腳本)。我的代碼在Chrome上運行,但在Firefox中間歇性地失敗,即有時廣告腳本運行並呈現廣告,而其他時間則不會。當它不起作用時,腳本代碼本身顯示在iframe中。無法使用jQuery寫入動態iframe

我的猜測是這些間歇性故障發生的原因是我寫入時iframe還沒有準備好。我已經嘗試過iframe_html(我的名字爲應該等待iframe準備好的函數),但沒有運氣。任何幫助感謝!我已閱讀過各種主題(例如jQuery .ready in a dynamically inserted iframe)。只是讓大家知道,我已經做了我對這個研究,但我堅持:)

迭代1:

function iframe_html(html){ 
$('<iframe name ="myiframe" id="myiframe"/>').appendTo('#maindiv'); 
$('#myiframe').load(
    function(){ 
    $('#myiframe').ready(function(){ 
    var d = $("#myiframe")[0].contentWindow.document; 
    d.open(); 
    d.close(); 
    d.write(html); 
    }); 
    } 
); 
}; 

迭代2:

function iframe_html(html){ 
$('<iframe id="myiframe"/>').appendTo('#maindiv').ready(
    function(){ 
    $("#myiframe").contents().get(0).write(html); 
    } 
); 
}; 
+0

嘗試將iframe上的src設置爲about:blank? – 2009-11-02 23:58:23

+0

你曾經解決過這個問題嗎? – timeitquery 2010-11-11 00:33:17

回答

0

假.html:

<html> 
<head><title></title></head> 
<body></body> 
</html> 

個JS:

<!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"> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<script type="text/javascript"> 

function iframe_html(html) 
{ 
var id = "myiframe_" + ((new Date()).getTime()); 

$('<iframe src="false.html" name ="'+id+'" id="'+id+'" />').appendTo('#maindiv'); 

var loadIFrame = function() 
{ 
     var elIF = window.document.frames[id]; 
     if (elIF.window.document.readyState!="complete") 
     { 
     setTimeout(loadIFrame, 100); 
     return false; 
     } 

     $(elIF.window.document).find("body").html(html); 
} 

    loadIFrame(); 


}; 
$(function(){ 

    iframe_html("<div>hola</div>"); 

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

然後請參閱本link

+0

這沒有奏效。我遇到了和以前一樣的問題,即廣告腳本不會間歇執行。 – 2009-11-03 18:59:00

+0

我修改了這個例子,看看鏈接,看看window.document.frames [x]的兼容性。 – 2009-11-04 11:24:08

3

老實說,與負載事件的I幀打交道時,我已經找到了最簡單,最可靠的方式用於實際iframe標記「的onload」屬性。一旦「onload」事件觸發,我從來沒有遇到太多設置內容的問題。這裏是一個例子:

<html> 
    <head> 
     <script type='text/javascript' src='jquery-1.3.2.js'></script> 
     <script type='text/javascript'> 
      $(function() { 
       var $iframe = $("<iframe id='myiframe' name='myiframe' src='iframe.html' onload='iframe_load()'></iframe>"); 
       $("body").append($iframe); 
      }); 
      function iframe_load() { 
       var doc = $("#myiframe").contents()[0]; 
       $(doc.body).html("hi"); 
      } 
     </script> 
    </head> 
    <body></body> 
</html> 

問題是你必須使用屬性標籤和全局函數聲明。如果你絕對不能有這些東西,我還沒有與此問題(雖然它看起來並不比你多嘗試不同的,所以我不知道):

<html> 
    <head> 
     <script type='text/javascript' src='jquery-1.3.2.js'></script> 
     <script type='text/javascript'> 
      $(function() { 
       var $iframe = $("<iframe id='myiframe' name='myiframe' src='iframe.html'></iframe>"); 
       $iframe.load(iframe_load); 
       $("body").append($iframe); 
      }); 
      function iframe_load() { 
       var doc = $("#myiframe").contents()[0]; 
       $(doc.body).html("hi"); 
      } 
     </script> 
    </head> 
    <body></body> 
</html> 

這是DOM和JavaScript中最令人沮喪的部分之一 - 我的哀悼與你同在。如果這些都不起作用,那麼打開Firebug並告訴我錯誤信息是什麼。

+0

酷解決方案! +1,你可以在'$(doc.body).html(「hi!」)''後添加一個函數來檢測何時動態數據在iframe中加載完成。 – 2014-12-05 08:07:16