ここからは、JavaScriptでのハマリどころを紹介していきます。
JavaScriptでは、ユーザーの操作に合わせてコンテンツを操作するコードを書くことが多くありますが、そのユーザー操作の検知タイミングがOSによって異なります。
コンテンツがスクロールされたときに発生するイベントです。最近、画面のスクロールに合わせて、サイドメニューが追従するような動きをするWebサイトが存在しますが、こういった動きを実現するときに利用するイベントになります。このイベントの発生タイミングが、iOSとAndroidで異なります。
iOSでは、スクロールが完了したタイミングで1回だけイベントが発生します。スクロールを行っている間は、イベントは発生しません。
Androidでは、スクロールしている間、連続的にイベントが発生します。このイベント発生タイミングは、PCブラウザと同じです。
これは、画面にタッチした状態で、タッチパネル上を移動させたときに発生するイベントです。このイベントは、コンテンツのスクロールとしても利用されるイベントであるため、スクロールとして機能するイベントか、コンテンツの要素に対するイベントかを正しく制御しないと、正しくイベントを検知できません。
このイベントを正しく取得するための事例をx-fit(クロスフィット)製品ブログで紹介していますので、参考にしてください。
最近話題になっている現象です。iOS6になってから、画面のスクロールが発生した後にsetIntervalメソッドをコールしても、コールバックメソッドが呼び出されません。setIntervalのようなタイマー系のメソッドは、JavaScriptのプログラミングでは多用されるものであるため、Webサイト上の機能で問題が発生する可能性があります。
これに絡んで影響を受けているのが、jQueryのanimateメソッドです。このメソッドは指定した要素を簡単にアニメーションさせることができるjQueryのメソッドですが、内部でsetIntervalを使用しています。iOS6を搭載した端末では、アニメーションが行われなくなる現象が確認されています。詳細は、x-fit(クロスフィット)製品ブログでも紹介しているので参考にしてください。
スマートフォン向けWebサイトの中には、デバイスのある場所(そのスマートフォンを持っている人がいる場所)に即した情報を提供する機能を持ったものがあります。その際、デバイスの現在位置を取得するにはJavaScriptが利用されます。
一部のAndroid端末で、W3Cの仕様で認められている形式で現在地を取得できない端末が存在します。
形式はいくつか存在しますので、まったく取得できないわけではありませんが、現在地取得が、そのサイトの大きな役割を占めている場合、問題になる可能性があるでしょう。このような動作は、実機で確認してみないと分からないことが多く、非常に厄介です。
スマートフォンではありませんが、ソニー製のAndroidタブレットに、「クイックビュー」機能がある端末があります。Webサイトの表示を速くするための機能と説明されていますが、この中で、ページロードの順序、およびJavaScriptの実行タイミングがクイックビュー機能により意図的に変更されるため、jQuery MobileなどのJavaScriptライブラリなどを使用している場合に、表示が正しく行われないことがあります。
回避するには、クイックビュー機能をユーザーに切ってもらうしか方法がなく、一部のサイト(DoCoMoの「dメニュー」など)では、「クイックビュー機能を使っている場合はOFFにしてご覧ください」と注意書きをして対応しているようです。
筆者の手元にあるいくつかの機種で確認したところ、Android 2.2以下に限定した事象のようです。
Androidにもともとインストールされている「ブラウザ」を使った場合、スクロールバーが見えているタイミングで、onClickイベントに合わせて動作する要素をタップしても、イベントは発生しません。スクロールをやめて、スクロールバーが見えなくなればイベントは発生します。PC向けのサイトをそのままスマートフォンに見せている場合に発生しやすい事象です。
回避策としては、onClickイベントではなく、onTouchstartイベントに合わせて動作するよう組み替えることで対応できます。ただし、PCのマウス操作では、onTouchstartイベントが発生しないので、デバイスに合わせた切り分けなどの対応が必要です。
今回はJavaScriptについて機種依存事象を紹介しました。JavaScriptはプログラミング言語のため、挙動の違いがプログラミングによるものか、OSや機種による依存事象によるものかが判別しづらいものが多くあります。
動作検証は実機での確認を行うことが最も確実でしょう。新たに発見した機種依存事象については、x-fit(クロスフィット)製品ブログで紹介しているので、ぜひご覧ください。
次回はCSSをテーマに、ハマリどころとなる事例を紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.