recherche

Maison  >  Questions et réponses  >  le corps du texte

Copiez le contenu du div dans une nouvelle iframe

<p>En fin de compte, j'essaie une technique qui imprime un <code>div</code> spécifique mais je suis bloqué sur cette partie de la question. </p> <p>J'ai du code qui doit être copié d'un <code>div</code> vers un nouveau <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(); ≪/pré> <p>J'ai essayé cela dans les outils de développement sur la page SO (je pourrais essayer d'utiliser <code>div#sidebar</code>). </p> <p>J'ai remarqué que je devais ajouter <code>iframe</code> au document pour que cela fonctionne. Sinon, la propriété <code>.contentWindow</code> est <code>null</code>. </p> Le code <p> semble fonctionner dans une certaine mesure, mais le <code>iframe</code> est vide, ou semble être vide. L'impression finale est vierge. </p> <p>Des conseils pour créer un nouveau <code>iframe</code> avec du contenu copié ? </p>
P粉042455250P粉042455250475 Il y a quelques jours421

répondre à tous(1)je répondrai

  • P粉306523969

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

    D'accord, j'ai une réponse. Je devrais en savoir mieux car je viens de terminer d'enseigner un sujet similaire.

    Le code fonctionne, mais il s'exécute trop tôt. Je dois attendre que le chargement du document soit terminé.

    Voici une version fonctionnelle :

    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();
            });
        };
    

    répondre
    0
  • Annulerrépondre