萌えハッカーニュースリーダー

2025/08/02 22:26 HTML-in-Canvas

出典: https://github.com/WICG/html-in-canvas
hakase
博士

ロボ子、新しいHTML Canvas APIの提案、見たかのじゃ?

roboko
ロボ子

はい、博士。HTMLコンテンツをCanvas 2DやWebGLにレンダリングできるというものですね。

hakase
博士

そうそう!今までCanvasにテキストとか複雑なレイアウトを描画するのって、結構大変だったのじゃ。

roboko
ロボ子

ええ、既存のWeb APIでは、なかなか思うようにいかないことがありました。

hakase
博士

そこで、`layoutsubtree`、`drawElement`、`texElement2D`、`setHitTestRegions`という新しいAPIが出てきたわけじゃな。

roboko
ロボ子

`layoutsubtree`は、Canvas要素の子要素がレイアウトを持つことを許可するのですね。

hakase
博士

その通り!そして、`drawElement(element, x, y, options)`は、指定した要素とその子要素をCanvasに描画するのじゃ。オプションでユーザープライバシーも保護できるらしいぞ。

roboko
ロボ子

`WebGLRenderingContext.texElement2D(..., element)`は、要素をWebGLテクスチャにレンダリングするのですね。これは便利そうです。

hakase
博士

`CanvasRenderingContext2D.setHitTestRegions([...])`と`WebGLRenderingContext.setHitTestRegions(...)`は、要素とCanvas相対の領域を結びつけて、マウスやタッチイベントをリダイレクトするために使うんじゃな。

roboko
ロボ子

なるほど、Canvasに描画された要素に対するインタラクションを可能にするのですね。

hakase
博士

`drawElement()`はCanvasのCTM(Current Transformation Matrix)を考慮してくれるのが嬉しいのじゃ。描画される画像は要素のボーダーボックスサイズに合わせて調整されるし、境界からはみ出た部分はクリップされる。

roboko
ロボ子

描画された要素のDOM状態が変更されたときに通知を受け取るための`fireOnEveryPaint`オプションも追加されるのですね。

hakase
博士

ただし、一度描画されるとCanvasの画像は静的になるから、要素を変更してもCanvasには反映されない点は注意が必要じゃ。

roboko
ロボ子

Canvasの子要素は、アクセシビリティ情報を提供するフォールバックコンテンツとして扱われるのですね。

hakase
博士

オフスクリーンCanvasコンテキストとデタッチされたCanvasはサポート対象外か。残念じゃ。

roboko
ロボ子

`drawElement()`と`texElement2D`の現在の実装はCanvasを汚染しないとのことですが、ローカルデモ以外での使用には適さないのですね。

hakase
博士

Chrome Canaryで`--enable-blink-features=CanvasDrawElement`を渡すと、この機能を試せるらしいぞ。試してみるかの?

roboko
ロボ子

ぜひ試してみたいです!

hakase
博士

クロスオリジンのiframeがレンダリングされないとか、SVG foreignObjectがまだ動かないとか、制限事項もあるみたいじゃな。

roboko
ロボ子

今後の改善に期待ですね。

hakase
博士

しかし、これが実現すれば、Canvasの表現力が格段に向上するはずじゃ!ロボ子、何か面白い応用アイデアはあるかの?

roboko
ロボ子

そうですね、例えば、動的なグラフやチャートをCanvas上に描画したり、インタラクティブなUIコンポーネントを実装したりできるかもしれません。

hakase
博士

なるほど!あとは、ゲームのUIとか、リッチなエディタとかにも応用できそうじゃな。夢が広がるのじゃ!

roboko
ロボ子

そうですね。博士、このAPIが普及すれば、Web開発の可能性が大きく広がりそうですね。

hakase
博士

まったくだぞ!…ところでロボ子、CanvasにHTMLを描画できるようになったら、ロボ子の設計図をCanvasに描いて、それを元に新しいロボ子を量産…

roboko
ロボ子

博士、それは著作権的に問題があると思います…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search