创建一个iframe,然后使用jQuery将数据附加到它

时间:2011-12-06 01:58:05

标签: javascript jquery iframe userscripts

我正在尝试对greasemonkey用户进行一些修改以实现我需要的功能。代码就像

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。现在它在“预”标签中。我尝试了很多方法,但仍然没有运气。 Iframe总是空的。 我完全是javascript的新手,不清楚这是否可行。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

由于您要在同一个域中添加iFrame,因此您可以像这样操作其内容:
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用户,您显然不需要定时器延迟。但是对于FF和IE 8(我仔细检查过的其他2个浏览器),添加动态的iFrame直到它已经解决了#34;之后才能被操作。由于某些原因。这个似乎需要大约200毫秒。

静态加载的iFrame没有这种延迟,请参阅jsBin演示。

答案 1 :(得分:0)

很难确切地说出你在问什么 - 但如果你想知道你是否可以将DOM元素附加到iFrame,答案就是“不”。