使用javascript将整个文档复制到iframe中

使用javascript将整个文档复制到iframe中,javascript,html,iframe,Javascript,Html,Iframe,这听起来有点不靠谱,但这正是我试图用javascript做的(这都是由事件处理程序触发的): 将页面内容(最好是整个文档或至少documentElement对象)保存到变量中 创建iframe并将其插入到 身体 将iframe的文档替换为已保存的文档(以便iframe现在具有与外部页面相同的内容) 更改外部页面 除了关于替换iframe文档的部分外,一切都很好。我尝试了很多不同的方法,但都有问题(它们概述如下)。我需要事件处理程序、样式、链接等,当页面在iframe中时,它们都能正常工作 是的,

这听起来有点不靠谱,但这正是我试图用javascript做的(这都是由事件处理程序触发的):

  • 将页面内容(最好是整个文档或至少documentElement对象)保存到变量中
  • 创建iframe并将其插入到 身体
  • 将iframe的文档替换为已保存的文档(以便iframe现在具有与外部页面相同的内容)
  • 更改外部页面
  • 除了关于替换iframe文档的部分外,一切都很好。我尝试了很多不同的方法,但都有问题(它们概述如下)。我需要事件处理程序、样式、链接等,当页面在iframe中时,它们都能正常工作

    是的,我意识到我可以将iframe的src设置为当前页面的url,但我希望页面不必加载。如果我不能想出一个解决办法,这就是我要做的


    我已经尝试过的事情: 我收到一条错误消息(“设置只有getter的属性”)

    这似乎可行,但不会重新呈现样式,事件处理程序也不起作用。有趣的是,链接也不起作用,它们甚至没有使用浏览器的默认样式。也许这是因为DOCTYPE没有复制到iframe

    iframe.contentWindow.document.documentElement.innerHTML = document.documentElement.innerHTML;
    
    这与removeChild/appendChild方法具有相同的行为



    如果我能让浏览器重新呈现样式并重新注册事件处理程序,那我就很幸运了,但我不确定这是否可行。

    关于最后一种方法,也许你复制的窗口的DOM还没有加载

    至于Doctype,您可以从头开始重建它,并使用document.write将其插入html节点之前


    doctype可以通过document.doctype访问,但它只有一个getter。

    如果在iframe中加载一个空的html样板文档,会怎么样?
    var html = iframe.contentWindow.document.importNode(document.documentElement, true);
    var idoc = iframe.contentWindow.document;
    while(idoc.firstChild) idoc.removeChild(idoc.firstChild);  // remove all children (firefox automatically creates an html element for iframes with no src)
    idoc.appendChild(html); // insert a new documentElement
    
    在某个文件夹“myFolder/sparePage.html”中创建一个文档,然后执行以下操作

    var myIframe=document.createElement(“iframe”);
    myIframe.style.display=“无”;
    document.body.appendChild(myIframe);
    函数myIframeLdd(){
    log(“myIframe已加载”);
    //..您的iframe就绪代码在这里
    myIframe.removeEventListener(“加载”,myiframeld,false);
    }
    addEventListener(“加载”,myiframeld,false);
    
    myIframe.src=“myFolder/sparePage.html”
    我在Prototype的“dom:loaded”事件触发时创建iframe,并在“click”事件中复制文档。不过,我将尝试doctype,看看它是否有效。我正在尝试放入doctype,但在使用document.write with document.appendChild时遇到问题。我试着把document.close()放得到处都是,但似乎什么都不起作用。在我看来,doctype不会使用appendChild添加,因为doctype本身是一个注释而不是一个节点,但我可能在这方面错了。我将从另一个框架的doctype以字符串形式构建document.type。然后我将使用document.write以..document.write(docTypevariable++…documentElement.innerHTML+)的形式进行复制
    iframe.contentWindow.document.documentElement.innerHTML = document.documentElement.innerHTML;