DEVELOPMENT
PCとスマフォ両方に対応したWebサイトを作る際、PCやiOS10以上、Androidだと問題ないのに、iOS9以下だと正常にJavascriptが動かないことがあります。 意外と知られてないですが、Javascriptのmethodの書き方や、細かな部分でiOS9以下のSafariではちゃんと動かない場合があります。 そんな時下記の項目をチェックしてみて下さい。僕はこれで数時間ハマりました。
Date関数
文字列型(String)からDate型に変換する際、文字列のフォーマットに注意する
new Date("yyyy-mm-dd")
普通に問題なさそうなのですが、iOS9のSafariだと、「invalid date」が帰ってきてしまいます。
new Date("yyyy/mm/dd")
-には対応しておらず、/でなくては行けません。
methodの初期値
Methodの定義にて、引数の初期値を設定しておきたい場合がありますが、これはiOS9のSafariだとNGです。
function methodA(param = array())
こういう初期値の設定のあるmethodを定義するとエラーになりますので、避けましょう。
iframe使用時、子から親の取得
子から親の要素を操作したい時、
window.parent.document
と指定すると直近の親が取得できますが、iOSのSafariだとちゃんと動かないときがありました。
window.top.document
を使うと取れました。これはもともと一番上の親を取得しますが、あしからず。
clickイベント
クリックイベントを発火させるためには、クリックできる要素でなくてはなりません。
a, bottom
などの要素に対してclickイベントを発火させましょう。他のブラウザの場合はdivやspan等なんでも発火しますがしてくれません。 でもどうしても、divなどでイベントを発火させたいときは、
css で下記を定義する
.element {
cursor:pointer;
}
もしくは、clickイベントの定義に
$("#element").click(function(){
.....
}).css('cursor','pointer');
と追加する
それでもだめな場合は、
$("大本要素").on("click touchstart", "要素指定", function(){
.........
}).css('cursor','pointer');
とすると、聞くようになりました。
他にも見つけたら追加していきます。
なおiOS10以降は上記の問題は解消されてるっぽいです。
株式会社UKAI 代表取締役CEO。建築を専攻していたが、新卒でYahoo!Japanにエンジニアとして入社。その後、転職、脱サラ、フリーランスエンジニアを経て、田舎へ移住し、ゲストハウスの開業、法人成り。ゲストハウス2軒、焼肉店、カフェ、食品製造業を運営しています。詳細はこちらから