StageWebView内のテキストフィールドでアプリがフリーズ [AIR for iOS]

スポンサーリンク

AIR for iOS 2.6 で作成したiPhoneアプリで、StageWebView内のテキストフィールドにフォーカスを当てると、その瞬間にカーソルの点滅が止まり、フリーズするという問題の対処法をメモしておきます。

この問題は、一度クリックされるなどしてフォーカスされたDisplayObject(Flash Proではステージに配置したインスタンスも含む)をremoveChildしたり、フレームを移動させてそのインスタンスがステージ上から無くなったりした場合に、stage.focusの値がそのDisplayObjectのままになっていると、その後、StageWebView内のフォームのテキストフィールドがフォーカスされるとフリーズするという現象の可能性があります。

例えば、「[Open] ボタンをクリックすると、そのボタンが消え、StageWebViewによってブラウザが表示される」というコンテンツの場合、表示リストにない [Open] ボタンにフォーカスが残ったまま、StageWebViewが表示される可能性があります。そのとき、StageWebView内にフォームによるテキストフィールドがあった場合に、ユーザがそのテキストフィールドをクリックするとフリーズします。

この対処法は、「StageWebViewでWebページを開く前に、意図的にstage.focusの値をnullにする」といった感じでfocusの値を整理しておくといいと思います。

サンプルスクリプトは、こんな感じです。

var swv:StageWebView = new StageWebView()
this.stage.focus = null
swv.stage = this.stage
swv.viewPort = new Rectangle(0,0,stage.stageWidth, stage.stageHeight)
swv.loadURL("http://mushikago.com")

2行目の「this.stage.focus = null」を1行加えるだけで、この問題を回避できます。