Monthly Archives: 10月 2010

flashcanvasはproを使いましょう!

引き続きCanvas案件やってます。

今日、一部の条件で、描画したものが消えるという報告がお客様より寄せられました。またIEです。ChromeやFFでは再現しないんですよ〜これが。で、確かに、画面に描画を比較的重く行っているケースで、レンダリングされない不具合があったんです。IE用のエミュレーションライブラリはflashcanvas(free版)を使用していました。

まずは、デバッガ……なんてものは、IEには存在しないので、ブックマークレット+alertで頑張ってデバッグしました:D

javascript:alert(hogehogeCanvas.fugafugaValues[1]);

でもデータ的に問題ないんですね。よくよく見ると、ctx.fillRestのような原始的なメソッドを読んでも反映されなかったりする。これは、flashcanvasが固まってるのかもしれない。

そこで、とりあえずflashcanvasを最新化…と思ったら、pro版というものが目についたので試しにダウソしてみたら、これがほら? ちゃんと動きなさる。

が〜ん。

僕の半日の苦しみが、たった$31 USDで解決されることになりました。

みなさん、これから、IE8でcanvas案件をやる場合は FlashCanvas Pro がオススメです!個人用途ならば無料で使えます。

IE8 Canvas 印刷問題

今Canvasを使った案件に携わっています。が、何かの間違いで、IE8もサポートしなければならなくなり半泣きです。画面レンダリングだけでなく、印刷もサポートしなければなりません。

画面ではドラッグアンドドロップでグリグリ動かすのですが、excanvasではスピードが遅すぎて使い物になりません。この問題については、FlashCanvasがサクサク動くので採用しました。(それでもある程度のチューニングは必要でした)
問題は印刷で、flashcanvasだと、

  • 縦横比が変
  • 周りに変な背景色が付く
  • 解像度が悪い

一方excanvasを使用すると、これらの問題が解決します。つまり

  • 縦横比問題なし
  • 変な背景色なし
  • 解像度が綺麗(ここらへんVMLの強みだなあと思います)

ということで、画面でグリグリ動かすのはflashcanvas、印刷するならexcanvasでリリースしました。
ところが、ページ送りが変になる不具合が発生しました。(印刷ページでは、縦幅を事前に計算して、CSSのpage-brake-beforeを使って、ページ送りを制御しています。) その現象というのが、

「キャンバスの途中でレンダリングが切れ、代わりに次のページの上部に現れ、Canvas以外の文字列を潰してしまう」

というものです。「互換モード」だとうまくいくので、もしかしたらうっかり、私がIE7互換モードでテストをしてしまったのかもしれません。そんなはずないのですが……。倍率を十分小さくして、50%くらいにすると、回避できるのですが、そうすると、文字が小さすぎて読めなくなります。結局用紙の半分くらいまでしか出力できない状態です。
それにしても、互換モードで動くとは。やはり、IE8でのVMLサポートは微妙だったと言うことなのでしょうか?

解決編

これを書けば互換モードで動く(それかよ!)

<meta http-equiv="X-UA-Compatible" content="IE=7" />

まあ、どうせIE9が出るまでの応急処置だし。