6 日目の記事です。
console.log('%cRED', 'color:red')
みたいにしてコンソール出力を装飾できます。
background-image
を使って画像を表示することもできました。
Console Parrot pic.twitter.com/FXyjgLKlYW
— 高梨ギンペイ (@ginpei_jp) December 6, 2020
ただし Chrome 以外は挙動が怪しい。まあね……。
Chromium DevTools で画像を表示する
Chrome, Edge は想定通り動きました。
<img>
を書けるわけじゃないけど background-image
が利用可能です。
console.log('%c ', ` background-image: url("https://ginpei.dev/ginpei-1200.png"); background-size: contain; border: solid 1px tomato; font-size: 0; padding: 50px; `);
URL はプロトコルも含める
画像の URL は /image.png
みたいなに /
で始めるのは駄目で、スキーム (https:
) やドメイン名も全て含めたものにする必要があります。
どうやら Chrome のコンソールの中の base URL は devtools://localhost/
なので。
何かしらの文字列を与える
'%c'
ではなく、空白文字(じゃなくてもいいけど)を伴った '%c '
になります。
制御文字である %c
だけをログ出力はできないみたいで、何か適当な内容を加える必要があります。
(出力を見ると %c
ごとに新しい <span>
を生成しているみたい。スタイル適用する先がないと何も出力されない。)
その上で文字を消す
空白文字でもその分高くなってしまうので、それを抑えるため font-size: 0
が必要です。
padding
でサイズを指定
width
, height
は利用できないけど padding
があるのでそこら辺組み合わせて画像が見えるようにします。
縦横いずれも両端に余白が付くので、表示サイズの半分にする必要があります。例えば 100px にしたいなら padding: 50px
にして、左 50px と右 50px で合わせて横 100px みたいな。
Chrome 以外では
あんまり良い感じではない。
Safari だと表示が変な感じに
行の高さが伸びないっぽいように見える。
Firefox では画像が出ない
Data URL も駄目だったので url()
が利用不可能なのかもしれない。
linear-gradient()
は使えた。
console.log('%c ', ` background-color: #6a8; background-image: linear-gradient( 45deg, #333 25%, transparent 25%, transparent 75%, #333 75%, #333 ), linear-gradient( 45deg, #333 25%, transparent 25%, transparent 75%, #333 75%, #333 ); background-position: 0 0, calc(50px / 2) calc(50px / 2); background-size: 50px 50px; display: block; font-size: 0; padding: 100px 0; `);
応用してコンソール表示を検出できそう
ふと思って Chrome で試してみたところ、画像のリクエストはコンソールを開いた時点で飛ぶっぽい。
'background-image: url("/consoleOpened?userId=${userId}")'
みたいにしてリクエストに識別子を含めることで「この利用者はコンソールを開いた」というをサービス側で検出できちゃいそう。そんで対象利用者に対して何かする的な。うーん。Firefox が対応してないのはこのせい?
ちなみに console.log()
の実行自体は DevTools を閉じていてもされる。リクエストが飛ぶのはコンソールを開いたときなので、DevTools で他のパネルを開いている間は飛ばない。
おしまい
それでは天国へようこそ!
console.log('%c ', ` background-image: url("https://ginpen.com/wp-content/uploads/2020/12/parrot.gif"); padding: 50vh 50%; `);
参考
- console – Web API | MDN
- adriancooney/console.image: The one thing Chrome Dev Tools didn’t need. – Chrome DevTools 用に画像を表示するもの。Firefox では駄目だった
- devtools-detect • Detect if DevTools is open – DevTools の開閉を検知するもの。ページ表示領域の大きさを監視しているので不完全