消えるcanvas
WordPressのテキストモードでcanvas要素
を書いて、ビジュアルモードに切り替えてもう一度テキストモードに戻ったとき、canvas
要素が消えてしまうことがあった。
いろいろと試しているうちに、以下のような挙動があることがわかってきた。
<canvas>
タグと</canvas>
タグを直接一行でつないだ時に消えるらしい
canvas
要素の前後が空行かどうかでも結果が変わるらしい
そこで、タグの書き方と前後の空行の入れ方の組み合わせで、canvasが消えるかどうかをチェックした。
canvasが消える条件
<canvas></canvas>
のように開始タグと改行タグが連続して書かれていて、なおかつ以下のケースの時にcanvas要素が消える。
ケース1:ファイルの中に単独で書いた場合
開始タグと終了タグが<canvas></canvas>のように連続しており、それのみがファイルの中に書かれている場合、ビジュアルエディタを経由すると要素が消える。行末の改行があってもなくても結果は同じ。
|
<!-- 改行なし --> [ファイル開始]<canvas></canvas>[ファイル終了] <!-- 改行あり --> [ファイル開始]<canvas></canvas>[改行] [ファイル終了] |
ケース2:前後に空行がある場合
開始タグと終了タグが<canvas></canvas>
のように連続しており、その行の前後に空行がある場合、ビジュアルエディタを経由すると要素が消え、 
に書き換えられる。
|
<!-- 前後に空行がある場合 --> ・・・前行 <canvas></canvas> ・・・後行 <!-- 以下のように書き換わる --> ・・・前行   ・・・後行 |
実質的にファイルの中にcanvas要素のみがあることは稀なので、問題となるのは上記の”<canvas></canvas>
の前後に空行がある場合”となる。
canvasが消えない条件
canvasが消えない条件は、上の「canvasが消える条件」の裏返しも含めて以下のようになる。
ケース1:開始タグと終了タグの間に文字があること
開始タグと終了タグの間に文字があれば、周辺条件がどうであってもcanvas要素は消えない。
canvas要素非対応のブラウザ対応のために、この方針をとることには意義がある。
ただし、間にある文字がスペースだけの場合は意味がなく、開始タグと終了タグが連続している場合と同様の結果になる。
|
<!-- 以下のようにすると、前後に空行があっても消えない --> <canvas>a</canvas> |
ケース2:開始タグと終了タグの間で改行されていること
開始タグと終了タグの間で改行されていれば、周辺状況がどうであってもcanvas要素は消えない。
canvas要素内に文を書かない場合は、簡易な一つの解決策。
ただし、開始タグと終了タグの間に空行が入っている場合は結果は複雑で、要素全体が消えたり、いずれかのタグだけが消えたりと結果は複雑になる。
|
<!-- 以下のようにしても、canvas要素は消えない --> <canvas> </canvas> |
ケース3:前後に空行がないこと
前後に行があれば(どちらも空行でなければ)開始タグと終了タグが連続していてもcanvas要素は消えない。
ただし、確実にこの記述方法に拠ることを担保しがたい。
|
<!-- 前後が空行でなければcanvas要素は消えない --> preceding line <canvas></canvas> succeeding line |
結論
以下の2つのうちいずれかを推奨。
- 開始タグと終了タグの間にcanvas非対応用の文を書く
- 開始タグ
<canvas>
の後で改行し、すぐ次の行に終了タグ</canvas>
を書く