2011-12-06 57 views
1

我正在嘗試對一個greasemonkey userscript進行一些修改以實現我需要的功能。代碼就像創建一個iframe,然後用jQuery向其添加數據

showAddress:function(addrString,type) 
{ 
     this.addrBox=$('<div id="batchPublish"></div>') 
     .append('<div id="batchHeader"></div>') 
     .append('<div id="batchContent" style="float:left;clear:both"></div>'); 

    ......... 

var batchContent=this.addrBox.find('#batchContent') 
     .append('<pre width="300" style="text-align:left" id="batchedlink"></pre>'); 

     this.addrBox.find('#batchedlink').css({'width':'500px','height':'250px','overflow':'auto','word-wrap': 'break-word'}) 
     .append(addrString); 

     $.blockUI({message:this.addrBox,css:{width:"520px",height:"300px"}}); } 

基本上這段代碼將數據寫入html。我想要實現的是將「addrString」寫入嵌入的iframe。現在它在「pre」標籤中。我嘗試了很多方法,但仍然沒有運氣。 Iframe總是空的。 我完全是JavaScript的新手,不清楚這是否可能。

謝謝你的幫助。

回答

4

因爲你是在同一個域中添加內嵌框架,那麼你就可以操作這樣的內容:
See it in action at jsBin.

$("#batchContent").append ('<iframe id="batchedlink"></iframe>'); 

/*--- Compensate for a bug in IE and FF, Dynamically added iFrame needs 
    some time to become "DOM-able". 
*/ 
setTimeout (function() { 
     var iframeBody = $("#batchedlink").contents().find ("body"); 

     iframeBody.append (addrString); 
    }, 
    333 
); 

注:
對於Chrome的userscript,你顯然不不需要計時器延遲。但對於FF和IE 8(另外兩個瀏覽器我進行了雙重檢查),添加了iFrame的動態只有在由於某種原因「解決」後纔可操作。這似乎需要大約200毫秒。

靜態加載的iFrame沒有這個延遲,請參閱jsBin演示。

+0

謝謝你的幫助!它確實有效。 –

+0

不客氣,樂意效勞! –

+0

OMG,這是我生命中的hackyist ******* ********,但是謝謝你的回答! +1 – dezman

0

很難分辨出你在問什麼 - 但是如果你想知道你是否可以將DOM元素附加到iFrame上,答案是「否」。

相關問題