首页  >  问答  >  正文

将div中的内容复制到一个新的iframe中

<p>最终我正在尝试一种打印特定 <code>div</code> 的技术,但我在这个问题的这一部分遇到了困难。</p> <p>我有一些代码,应该从一个 <code>div</code> 复制到一个新的 <code>iframe</code>:</p> <pre class="brush:js;toolbar:false;">var iframe = document.createElement('iframe'); var div = document.querySelector('div#sidebar'); var content = div.innerHTML; iframe.srcdoc = `<!DOCTYPE html><html><head></head><body>${content}</body></html>`; document.body.append(iframe); iframe.contentWindow.print(); </pre> <p>我在 SO 页面的开发者工具中尝试了这个(我可以尝试使用 <code>div#sidebar</code>)。</p> <p>我注意到,我需要将 <code>iframe</code> 添加到文档中才能使其正常工作。否则,<code>.contentWindow</code> 属性为 <code>null</code>。</p> <p>代码似乎在某种程度上工作,但是 <code>iframe</code> 是空的,或者看起来是空的。最终打印出来的是空白。</p> <p>在创建一个带有复制内容的新 <code>iframe</code> 中有什么技巧?</p>
P粉042455250P粉042455250430 天前384

全部回复(1)我来回复

  • P粉306523969

    P粉3065239692023-08-18 12:19:00

    好的,我有一个答案。我应该更加了解,因为我刚刚完成了一个类似主题的教学。

    代码是有效的,但是它运行得太早了。我需要等待文档加载完成。

    这是一个可行的版本:

    var iframe = document.createElement('iframe');
    var div = document.querySelector('div#sidebar');
    var content = div.innerHTML;
    iframe.srcdoc = `<!DOCTYPE html><html><head></head><body>${content}</body></html>`;
    
    document.body.append(iframe);
    
    //  等待iframe加载完成:
        iframe.onload = () => {
            iframe.contentWindow.print();
            iframe.contentWindow.addEventListener('afterprint', event => {
                iframe.remove();
            });
        };
    

    回复
    0
  • 取消回复