ByteScope

Clipboard Inspector

クリップボードの全 MIME、HTML 原文、hex。この端末だけ、クリックしてから、閉じたら消える。

アップロードも記録もしません。スナップショットはこのタブの中だけ、離れたら消えます。

Async Clipboard API

まだ読んでいません。「読み取る」を押してください。このページは勝手に読みません。

navigator.clipboard.read
確認中
navigator.clipboard.readText
確認中
clipboard-read の許可
確認中

よくある対応

よくある話です。上の実測を信じてください。? のマスはこの場の実機では未確認です。

APIChromeEdgeFirefoxSafari
navigator.clipboard.readChrome と Edge はジェスチャ後にあり。Safari はテキストと画像。Firefox はここでは未確認。?
navigator.clipboard.readTextread() が無いときの退避。テキストだけ。「クリップボードがテキストだけ」ではありません。
paste の clipboardData今のデスクトップブラウザにはあります。read() と同じ管ではありません。
permissions.query clipboard-readよく throw します。throw は unknown で、denied にはしません。Firefox と Safari は未確認。??

今このブラウザ: 確認中

このツールについて

このページが答えるのは、開発者が本当に調べる一文です。クリップボードに何が入っているか。推測ではありません。クリックのあと navigator.clipboard.read() が渡す MIME を全部出します。text/plaintext/htmltext/uri-listimage/pngimage/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 になりません。dangerouslySetInnerHTMLeval もありません。文言だけ欲しいなら text/plain の行です。HTML の行は、貼った結果が崩れた理由です。

拒否は空ではない。unknown は denied ではない

clipboard.read() はクリックかペーストからしか呼べません。読み込み時には読みません。NotAllowedError は拒否(またはジェスチャ不足)で、空ではありません。空は別の結果です。navigator.permissions.query({ name: "clipboard-read" }) はよく throw します。throw は unknown で、denied にはしません。readText() しか無いブラウザは「このブラウザはプレーンテキストしか返さない」と書きます。「クリップボードにプレーンテキストしか無かった」とは言いません。

二つの経路は、ずれることがある

Async Clipboard API と pasteclipboardData.items は別の管です。Chrome は read() で HTML を消毒し、web text/html を残すことがあります。ペースト側だけ見える型もあります。逆もあります。このページのペースト欄は比較用です。どちらもこのタブの中だけ、離れたら消えます。

よくある質問

クリップボードの中身を送ったり保存したりしますか?

しません。バイトはこのタブから出ません。サーバ往復も、中身を載せた計測も、ログもありません。閉じるか移動すればスナップショットは消えます。ページ上の一文が方針の全部です。

なぜクリックが要るのですか。自動で読まないのですか?

Async Clipboard API はユーザの操作が必要です。仮に不要でも、このページは自動では読みません。クリップボードは秘密です。パスワード、トークン、送っていないメール。クリックが同意です。ペースト欄は、貼ったというもう一つの同意です。

押したら permission denied と出ました。空、ということで?

違います。NotAllowedError は拒否(またはジェスチャ不足)で、空ではありません。空は別です。read() が項目ゼロか、ブラウザが NotFoundError を投げたときです。このページは二つを混ぜません。

ペースト欄と Read で型が違います。どちらが本当ですか?

どちらも、それぞれの API としては本当です。navigator.clipboard.read()event.clipboardData は別経路で、ブラウザの消毒も違います。とくに text/html。ずれ自体が情報です。片方を他方に書き換えません。

text/plain しか出ません。コピーしたものはそれだけ?

限りません。clipboard.readText() しか無いブラウザがあり、Unicode テキスト以外の MIME は出ません。このページはそう書きます。「クリップボードにプレーンテキストしか無かった」とは、他の型を聞いていないときに言いません。

クリップボードの HTML をここで見て大丈夫?

HTML はエスケープして文字として出します。要素にはしません。スクリプトにもしません。innerHTML にも載せません。それでも信頼しない入力、として扱ってください。ビューアであって、描画のプレビューではありません。