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行加えるだけで、この問題を回避できます。
東京造形大学卒業後、マクロメディア(現アドビ)に入社。QAやテクニカルサポートマネージャーとしてFlash、DreamweaverなどのWeb製品を担当。独立後、2007年に虫カゴデザインスタジオ株式会社を設立。2021年東京三鷹を拠点に。最近は、Unity, Unity Netcode for GameObjects, CakePHP, Laravel, ZBrush, Modo, Adobe Substance 3D, Adobe Firefly, Xcode, Apple Vision Pro, Firebaseにフォーカスしています。モバイルアプリ開発情報を主としたブログ「MUSHIKAGO APPS MEMO」の中の人。