<p>html2canvas:複製されたドキュメントでDIVを見つけるときにエラーが発生しました</p>

作成日 2018年01月24日  ·  12コメント  ·  ソース: niklasvh/html2canvas

バグレポート:

html2canvasに渡す前にHTMLElementでelement.cloneNode(true)またはangular.copy(element)を使用すると、このエラーが返されます。

html2canvas:複製されたドキュメントでDIVを見つけるときにエラーが発生しました
Uncaught(in promise)複製されたドキュメントでDIVを見つけるときにエラーが発生しました

仕様:

  • テストされたhtml2canvasバージョン:1.0.0-alpha.9 "
  • ブラウザとバージョン:Chrome 63.0.3239.132
  • オペレーティングシステム:Mac

最も参考になるコメント

これは現在修正されています。
domをメモリ内のオブジェクトとして使用できないようです。レンダリングが必要です。
document.getElementsByTagName( 'BODY')[0] .append(mainDom);を追加します。 私の問題を解決しました。

html2canvasが処理されたら、mainDomの削除を処理する必要があります。

全てのコメント12件

キャンバスをローカルストレージに保存し、React.jsを使用して別のページにリンクしようとすると同じ問題が発生します

<Link to="/system">
            <button className="submitButton"  onClick={this.captureMap} >SUBMIT </button>
</Link>

   captureMap(){
      html2canvas(document.querySelector(".mapboxgl-canvas")).then(canvas => {
        // document.body.appendChild(canvas);
        var image = canvas;
        if(typeof localStorage !== "undefined"){
          localStorage.setItem('mapImg',image.toDataURL());
        }
      });
    }

同じ問題に直面している
const mainDom = document.createElement( 'div');
mainDom.appendChild(domElem [0] .cloneNode(true)); // domElemはいくつかのdomオブジェクトです

mainDomをhtml2canvasに渡すと、以下のエラーが表示されます。

html2canvas:複製されたドキュメントでDIVを見つけるときにエラーが発生しました
demo.html#/ Demo / Widget:1 Uncaught(in promise)複製されたドキュメントでDIVを見つけるときにエラーが発生しました

@HarishSonar jsfiddleで問題を再現していただけますか?

これは現在修正されています。
domをメモリ内のオブジェクトとして使用できないようです。レンダリングが必要です。
document.getElementsByTagName( 'BODY')[0] .append(mainDom);を追加します。 私の問題を解決しました。

html2canvasが処理されたら、mainDomの削除を処理する必要があります。

将来の訪問者のためだけに、私も同じ問題を抱えています。

最終的にDOMノードのクローンを作成し、それをdocument.bodyの最初の子として挿入し、CSSスタイルposition: absolute; top: -16384px; width: ${originalElementWidth} 。 これは、スクリーンショットとしてキャプチャする前にDOMノードに変更を加える必要がある場合に役立ちます。

また、 @ niklasvh 、まだご覧になりたい場合は、jsfiddleをhttps ://jsfiddle.net/bLwya8sf/1/

こんにちは、私もこの問題に遭遇しました。 そして、html2canvas関数をトリガーすると、プロジェクト内のすべてのリクエストが送信されます。 解決策を教えていただけますか?どうもありがとうございました。 これは私のコードです:
public downBtn(){
var targetDom = document.querySelector( '#Box');
var copyDom = targetDom.cloneNode(true);
document.body.appendChild(copyDom);
html2canvas(copyDom).then(canvas => {
var imgData = canvas.toDataURL( 'image / jpeg');
var img = new Image();
img.src = imgData;
img.onload = function(){
pdf.addImage(imgData、 'jpeg'、0、0、this.width * 0.225、this.height * 0.225);
pdf.save( 'pdf_2.pdf');
};
copyDom.remove();
});

ここで同じ問題:この問題を回避するために、SVGをdivにラップする必要がありました...

ここで同じ問題:この問題を回避するために、SVGをdivにラップする必要がありました...

それを行う方法について話すことができますか?

これは現在修正されています。
domをメモリ内のオブジェクトとして使用できないようです。レンダリングが必要です。
document.getElementsByTagName( 'BODY')[0] .append(mainDom);を追加します。 私の問題を解決しました。

html2canvasが処理されたら、mainDomの削除を処理する必要があります。

はい、メモリ内のオブジェクトとしてdomを操作するのではなく、レンダリングされた要素を操作する必要があります

ここで同じ問題:この問題を回避するために、SVGをdivにラップする必要がありました...

それを行う方法について話すことができますか?

もちろん!
ここに例を示しました
これは、Internet Explorer 11を除いて、すべてのブラウザで罰金を動作します:html2canvasアプローチは知らない...最終PDFで何かをレンダリングしていない場合html2canvasの問題やそのjsPDFの1 ...任意のヒント?
ありがとうございました

これは現在修正されています。
domをメモリ内のオブジェクトとして使用できないようです。レンダリングが必要です。
document.getElementsByTagName( 'BODY')[0] .append(mainDom);を追加します。 私の問題を解決しました。
html2canvasが処理されたら、mainDomの削除を処理する必要があります。

はい、メモリ内のオブジェクトとしてdomを操作するのではなく、レンダリングされた要素を操作する必要があります

oncloneコールバックを使用してみませんか? これにより、レンダリングする前にdocumentCloneを操作して、変更を加えることができます。
たとえば、スクロール可能なテーブルであるガントチャートがあり、非表示の行がPDFで表示された状態でテーブル全体を印刷するとします。

html2canvas(document.body, {
        onclone: function(documentClone) {
            // target elements you want to change on the "documentClone" object
        })
        .then(function(canvas) {
            // print canvas with e.g: jsPDF
        });
    };

ここでIE11を解決しまし

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

Josh10101010 picture Josh10101010  ·  3コメント

kunal886496 picture kunal886496  ·  3コメント

yasergh picture yasergh  ·  5コメント

anthonymejia picture anthonymejia  ·  4コメント

Loki180 picture Loki180  ·  4コメント