このツールについて
このページが答えるのは、開発者が本当に調べる一文です。クリップボードに何が入っているか。推測ではありません。クリックのあと navigator.clipboard.read() が渡す MIME を全部出します。text/plain、text/html、text/uri-list、image/png、image/svg+xml、それに web application/x-vnd… のような独自形式。1行が 1 つの型、バイト数、それに合った見方です。送りません、残しません。ページを離れたら消えます。
テキスト欄ではなく、MIME ごと
フォームへ貼ると、その欄が欲しい型だけ残ります。クリップボード本体は、同じコピーの別表現を同時に持っていることが多いです。ここは全部並べます。hex は hex editor と同じ言葉です。オフセット、16 バイト、右に ASCII。画像は型とバイト、createImageBitmap が読めたときだけ画素サイズ。getType() が reject した型は unavailable で、残りは出します。
いちばん欲しいのは HTML の原文
Word や Notion から貼ると、見えない乗客は text/html です。インラインの style、mso-、変換されたリスト。このページはそのソースを文字として出します。エスケープするので DOM になりません。dangerouslySetInnerHTML も eval もありません。文言だけ欲しいなら text/plain の行です。HTML の行は、貼った結果が崩れた理由です。
拒否は空ではない。unknown は denied ではない
clipboard.read() はクリックかペーストからしか呼べません。読み込み時には読みません。NotAllowedError は拒否(またはジェスチャ不足)で、空ではありません。空は別の結果です。navigator.permissions.query({ name: "clipboard-read" }) はよく throw します。throw は unknown で、denied にはしません。readText() しか無いブラウザは「このブラウザはプレーンテキストしか返さない」と書きます。「クリップボードにプレーンテキストしか無かった」とは言いません。
二つの経路は、ずれることがある
Async Clipboard API と paste の clipboardData.items は別の管です。Chrome は read() で HTML を消毒し、web text/html を残すことがあります。ペースト側だけ見える型もあります。逆もあります。このページのペースト欄は比較用です。どちらもこのタブの中だけ、離れたら消えます。