mknstone
@mknstone

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

html2canvas で 文字だけレンダリングされない

解決したいこと

html2canvasで、ブラウザ上の画面を画像化しようとしているのですが、
何故か文字だけレンダリングされません。
解決方法を教えて頂けると助かります🙏

発生している問題・エラー

▼ [save]ボタンをクリックすると、指定された薄いグレーの領域がキャプチャされ、ページ下部に画像が追加されるが...

1.png

▼ ...何故か文字だけレンダリングされない
2.png

該当するソースコード

全体はnuxtを使用しています。

.../app/pages/edit.vue
<template lang="pug">
section.l-sample
  .capture(ref="capture") Hello World!
    h4 123
    img(src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_light_color_272x92dp.png")
  button(@click="captureImage") save
</template>

<script>
import html2canvas from 'html2canvas'
export default {
  layout: 'noauth',
  methods: {
    async captureImage () {
      const canvas = await html2canvas(this.$refs.capture,{
        logging: true,
        allowTaint: true,
      })
      document.body.appendChild(canvas);
    }
  }
}
</script>

<style lang="scss">
.l-sample {
  padding: 1rem;
  background: teal;
  .capture {
    background: #ccc;
    color: black;
  }
  h4 { background: red; }
  img { width: 200px; }
  button {
    background: gray;
    padding: 0.5rem;
    border: solid thin #666;
  }
}
</style>

ログ(chrome)

スクリーンショット 2024-07-17 23.33.33.png

自分で試したこと

  • 最初は画像(Googleロゴ)もレンダリングされなかったのですが、オプションでallowTainttrueに指定する事で解決しました。
  • 要素の属性は関係なく、inputpでも表示されません。
    cssのcontentで指定された文字列もダメでした。
  • 公式ドキュメントを読んだり、githubのissuesを確認したりしたのですが、近しい事例が見あたらず...。
1

2Answer

Comments

  1. @mknstone

    Questioner

    アドバイスありがとうございます!引き続き解決しない場合、試してみます!

手元で Nuxt 3 の環境を作って試してみたところ、文字を含めて期待通りレンダリングされました。

スクリーンショット 2024-07-18 11.14.08.png

全体のコードを置いておきます。

バージョン:

  • nuxt@3.12.3
  • html2canvas@1.4.1
  • Google Chrome 126.0.6478.127
0Like

Comments

  1. @mknstone

    Questioner

    ありがとうございます!! 後ほど拝見させていただきます🙇‍♂️

Your answer might help someone💌