イナヅマTVログ

[JavaScript]困った、Androidブラウザ上で起きた事あれこれ

| 2件のコメント

仕様なのかバグなのか、書いたスクリプトが原因かもだけど。
Androidブラウザ上で起きたこまったことをいくつか…

*標準ブラウザを使用しています。

予約語をキーにしたObjectがエラーになる(多分)

Android 2.2

var someObject = {
	new: '値'
}


キーに”new”を設定したObjectを作ろうとしたらエラーになっちゃいます。
XMLから取ってきたデータをObjectにしようとしてたんですけど…
tagにnewとあったので何も考えずにそのままキー名にしたのがまずかったみたいです。

2.3, 4.0はエラーにならないので2.2だけで発生する問題のようです。
原因は良くわからないけど”new”は予約語で、それを別の用途に使ってはいけない厳しい掟があるんじゃないかと勝手に納得しました。

キー名を変更し対処しました。

キーボードを切り換えるとblurイベントが発生する

Android 2.2
input type:text選択しキーボードを切り換えると該当フィールドのblurイベントが発生します。

必須入力項目をblurイベントでチェックしたかっただけなんですけど。
英数だったキーボードを”かな”とか”記号”とかへ切り換えるとblurイベントが発生してしまいます。
focusが外れてるようには見えず、カーソルは入力エリアにそのまま存在します。

お手上げでした。

キーボードが出現するとwindowの高さを削る

Android 2.2, 2.3, 4.0
キーボードが表示され入力を完了しキーボードが消えきる前にwindowの高さを測ると、キーボードの高さ分差し引かれた値が返ってきます。
ブラウザウインドウと同じレイヤー(?)上にキーボードは現れるようです。
ブラウザウインドウ自体が縮んでしまってるみたい。

キーボードが消えたら正常に高さを取得できるので、なんとかキーボードが消えるタイミングを知る方法がないものかとGoogle大先生におたずねしましたが、力及ばず探しきれませんでした。

しょうが無いのでキーボードが出たら常に(ループして)windowの高さを監視することにしました。
もっと良い方法はないでしょうか?

キーボードの「実行」「移動」で強制的にformが送信される

Android 2.2, 2.3
input type:textでキーボード右下に「実行」あるいは「移動」と表示されます。
この実行を押すとform:actionが反応します。

JavaScriptでsubmitイベントに対して仕掛け(フォームチェック)を入れておいたのですが、無視されます。
submitイベントを発生させず強制的にformを送信してしまうようです。(詳細をご存知の方はお教え下さい)

<form action="javascript:void%200">

として反応させないようにしました。
voidとか使いたくは無かったのですが仕方がないと諦めました。

select / option にはblurイベントが無い

Android 2.2, 2.3, 4.0
無い?と疑問型が正しいかもです。
selectでblurイベントを仕込んでも反応してくれない。

changeで対応しました。
これは自分のやっちまった感がハンパないですけどw

2件のコメント

  1. タイムリーなのでコメントを残します。
    selectにblurが無いのではなく、focusされないようなのです。
    なのでtouch系のイベントでfocus()してやると、blurも発生します。
    しかしなぜか4.0だと、optionにfocusが移るとselectのblurが発生すると言う不思議仕様です。
    セレクトにフォーカスをあてる→選択肢を選ぶ→違う選択肢にする→フォーカスをはずすとすると、focus,blur,change,change,focus,blurとイベント大量発生します。
    2.3だとfocus,change,change,blur、iOSだとfocus,change,blurで済むんですけどね。

  2. なるほど〜
    focusは最初設定してたんですけど、理由は思いだせないのですが、外したんですよね。結果的にそれがまずかったのか、良かったのか分からないですけど。
    コメントありがとうございます、とても助かりました。

コメントを残す