Androidのブラウザ

Androidのブラウザ(mobile safari  4.0)が他のブラウザと違って思い通りに動かない。

1)  canvasの描画でfillStyleに指定した内容が正確に表現できない場合ある(薄くぼやけた感じになってしまう)

  fillStyleで透明度も指定してglobalAlphaも設定するとおかしくなるようだ。

2)  ページの読込みが完了しない

  何故かページの読込みが完了しない。ずっとアドレス表示エリアの下に表示しているプログレスバーが消えない。どうもsocket.io.jsでソケット通信をしているのが原因らしい。

  とりあえず、それをやめれば完了するが、それでもしばらく時間がかかる。

Android上でもChromeなら問題なく動く。ブラウザはまだまだ発展途上なのか?それとも使用しているスマホの問題か・・・?

 

 

JQueryでtouch系のイベントをbindする時の注意

JQueryでtouch系イベント(touchstart、touchmove、touchendなど)をbindする際に以下のように引数を指定した形で定義すると思うが、ここで渡ってくる引数からはマウスの座標等は取得できないらしい(モバイル用があるからそちらを使用しろということかも知れないが)。

 

$( '#hoge' ).bind("touchmove", function(e) {
var x = e.changedTouches[0].pageX;      //  e に changedTouches は定義されていないので座標が取得できない
});
 

ここで取得するには window.event (グローバル変数)から取得する。

 

JQueryではなくコントロールの addEventListener でイベントハンドラを設定した場合は、その引数から取得可能。

var ctrl = document.getElementById('title');
ctrl.addEventListener('touchmove', function(e) {
var x = e.changedTouches[0].pageX;      // 正常に取得できる
});
 
※ 使用したJQueryのバージョンは 1.7.1
 
 

JQuery.ajaxでコンテンツタイプ ‘x-www-form-urlencoded’ のエンコード

canvasのデータをtoDataURLで取得し、ajaxでサーバに送信する処理を作成したみた。

するとアップロードしたデータが表示できない。

prototype.jpajaxを使用した場合はアップロードしたデータは正常に表示できる。

調べてみるとJQueryで送信した場合、ajaxに設定したデータに含まれるプラス(’+’)が、半角スペース(' ')に変換されている。

JQuery.ajaxprocessDataの設定にせいかと思い、falseを設定してみるが変わらない。

ネットで調べるとコンテンツタイプが ’x-www-form-urlencoded’ の場合は、半角スペースをはプラスに変換して送信することになっているらしい(RFC1866 Section-8.2.1)。

しかし何故かJQueryではの変換がされているような・・・???

この辺の知識がなくいろいろ調べてみるがよくわからずデバッガで追っていくと、prototype.js の場合、XMLHttpRequestで送信するデータのプラス('+')、半角スペース(' ')、スラッシュ('/') がそれぞれURLエンコード(?)されて、%2b%20%2Fになっている。

JQueryの場合は実際どうなっているのかよくわからないが、sendを実行する時点までにデータが変換されている様子はない(そこまで追い切れないのですが…)。

基本的に外側でそのエンコードをするべきなのかと思ってajaxに設定する前に変換すると正常にデータがアップロードされた。

果たしてこれでいいのだろうか?

 

Bezitter-簡易ベジャ曲線編集サービス

Bezitterはベジェ曲線で簡単な図形をデザインするサービスです(サービスと呼ぶほどのものでもないのですが・・・)。
落書き感覚で弄ってもらえると良いかと思います。
理想としては粘土細工のようなイメージで形を作って行けるものになればとも考えています。
今のところは本当に単純な機能しかありません。
出来れば今後いろいろ機能を増やしていく予定です。
 

現時点でBezitterには以下の機能があります。

  • デザイン機能
    -端点(アンカーポイント)、制御点のマウス操作によるベジェ曲線編集
    -塗りつぶしまたは線による図形の描画
    -描画色・背景色指定
    -影の指定
  • デザインの保存・読出し(現状保存できるデータは1つです)
  • 作成したデザインをPNGファイルとして保存可能
  • 作成したデザインをTwitterへツイート

 

また、BezitterHTML5canvasを使用して作成しています。未対応のブラウザでは残念ながら動作しません。
現状以下のブラウザでは動作することを確認しています。

  • Chrome 19.0.1084.56 (※一部の正常に動作しない機能があります。HELP参照)
  • Firefox 12.0
  • IE9

 

アナログ時計(FT-003)

魚の形をした秒針のHTML5のcanvasで作成した時計。

別Windowでopen 極小(200,200) 小(346,346) 中(480, 480) 大(852, 852)

特徴

  • 24時間計と12時間計を内蔵
  • 時報機能
  • アラーム機能(3個)
  • タイマー機能
  • 天気予報表示(24時間計の3時間ごとの位置に表示されます)

使い方

キー操作により各機能を設定できます。

  • 「S」キー : 設定ダイアログ(時報有無、天気予報表示有無)を表示する
  • 「T」キー : タイマー起動
  • 「C」キー : タイマーキャンセル
  • 「F」キー : 天気予報表示(5秒間)
  • 「1」~「3」キー :アラーム設定

   ※ IMEがONになっていると機能しないので注意!

その他

  • Chrome(18.0.1025.152)、Firefox (11.0) で動作確認。IE8では動作不可。
  • バグはいろいろあるかもしれません!

Chrome - Canvasの文字列描画で影付けの効果(shadow効果)が消える

バージョンアップされたばかりのChromeだが、今まで出来ていたCanvasに対して文字列を出力(fillText)する場合の影付け効果が利かなくなった。

・バージョン:16.0.912.63 m

 

以下はChromeで影付けの設定を行って描画した結果。影付けがされていない。

以下はFirefoxで同様に描画した結果。正常に影が描画されている。

 

Canvas描画ツールで以下のコードを実行すると上記の結果を見ることができる。

context.shadowBlur = 10;
context.shadowColor = 'red';
context.shadowOffsetX = 10;
context.shadowOffsetY = 10;
context.font = "84px 'Comic Sans MS'";
context.fillText("Hello!", 300, 100);

 

window.onloadが呼ばれなくなる バグもまだ修正されていないようで、個人的にはメインのブラウザとして気に入って使用しているのに残念である。

早急に修正して欲しい!


<追記>

  • 2012/2/22  バージョンが17.0.963.56 になって修正されたようです。
  • 2011/12/23 座標変換で回転(rotateで0以外の回転角を設定)すると影が表示されるようである。

Canvas描画テストツール

HTML5のCanvasの描画スクリプトをテストするツール。

  • スクリプトエディタにJavascriptを定義し、その内容をCanvasに描画する
  • スクリプトエディタでは、context, canvas 変数によりCanvas及びそのContextにアクセスする
  • スクリプトエディタの内容は終了時にローカルストレージに保存される
  • Chrome(15.0.874.121 m)、Firefox(8.0)で動作確認。IE8は動作不可、IE9は未確認。

Canvas描画テストツール起動

 


修正履歴

2012.6.13 U001

  • スクリプトに名前を付けて保存できるように修正
  • 作成したスクリプトをセレクトボックスで選択できるよう修正

 

Chrome window.onloadが呼ばれなくなる

本日(12/8)、数日前は正常に表示されていたページが何故かChromeでは正常に表示されなくなった。

FireFoxやIEでは正常に表示されている。

Chromeのバージョンは15.0.874.121 m。

特にHTMLもスクリプトも変更していない。

全部のページではなく、一部のページで現象が発生している。

調べてみると何故か window.onload が呼ばれない。

スクリプト、HTMLを削って調べていくと、何故か audio タグがあると現象が発生するようである。

その部分をコメント化すると正常に表示された。

以下にサンプル(onloadでブラウザの情報を表示する)のリンクを示す。

※ onloadが呼ばれないのでブラウザの情報を表示していない。

※ audio 要素をコメント化しているので、onloadが呼ばれてブラウザの情報を表示している。

Chrome は自動的にアップデートされるようになっているが、いつの間にかバグが入ってしまったのか、早期の修正を希望します。


<追記>

  • 2012/3/26 バージョンアップ(17.0.963.83) で修正されたようです!!
  • 2011/12/14 バージョンアップ(16.0.912.63 m) したが修正されていなかった