#6474

非同期読み込みの罠


web制作

昨日3時間ほど悩んでも解決できなかった、
作ったwebサイトの中でjQueryイベントのひとつである「Click」
(特定の領域をクリックすると指定のコードを実行する仕組み)がiPhoneでのみ発動しない問題。
なんとか解決することができました。
まったく予想だにしないところに原因があり、解決できたときは強烈に気持ちよかったです。
これ、さすがにQiitaにまとめたら需要ある案件なんじゃないか……?
以前(去年春)も物凄い悩んで一瞬解説用サブブログの開設を目論んだものの、
あれは確か全然大したことのない原因で恥ずかしかったので結局公開しませんでしたが、
今回のはさすがに誰かが同じ轍を踏まないようにするために記事にするべきな気がする……。
なんたって、トラブル内容で検索しても的外れな答えしか載っていないんですからね。
下手にググるとますます泥沼にハマっていくパターンです。

ちなみにブログ読者のためにこっそり答えをネタバレしておきますが、
原因はjQueryそのものではなく、外部javascriptを読み込む際のオプションである「async」でした。
これは遅延読み込みを意味しており、通常は外部ファイルはページの読み込み前に読み込みますが、
これが指定されているとページの読み込み後に読み込みます。
そのため、asyncを指定された外部ファイルに関数が定義されていて、
ページ内でその関数を呼び出す記述がある場合、
関数を読み込む前に呼び出そうとしてしまうためこれはエラーになります。
PCやAndroidの場合はこのエラーが発生しても無視されてそのままプログラムが走るのですが、
iPhoneはこのエラーを許さず、そこでプログラムを止める仕様になっていたみたいなんですよね。
当然jQuery自体はasyncしていませんが、
ずっと昔から放置しているその他のプラグインにたまたまasyncがついていて、それが原因でした。

判明してみればなんてことない初歩的なコーディングのミスなのですが、
jQueryのclick不発からasyncに繋げる連想力は自分にはまったくありませんでした。
結果的に解決に5時間もかかってしまったという……。
でもたぶん、これでも問題解決能力は伸びている方だと思います。
一昨年、いや去年の自分ですらこれを解決するのは難しかったでしょう。
なにげにコマンドラインも駆使したし。その辺は成長したと思ってもいいのかなと。

ともあれ、解決できて良かったです。今日最大の山場を越えられてスッキリしました。
プログラミングは、こういうハードルを越えて成長するところにゲーム的な面白さを感じます。
以前、プログラミングは承認欲求ありきだと書きましたが、
もしかすると少しずつ他人の眼が無くとも楽しいと言えるようになってきているのかも。
そうだとしたら大変喜ばしいことです。
モチベを他人に左右されることなく、自家発電できるということですからね。

今日は01時就寝07時35分起床。朝は比較的無理なく起きることができました。
月曜日の自分にしてはとても珍しい現象です。日中の眠気も今日は明らかに弱かったです。
眠くなくても昼休みに突っ伏すことで眠気が解消されることを知ったので、
それを徹底することで眠気が安定的に弱まってきているのかもしれません。
軽運動は相変わらず続かないですが、カフェイン錠とサウナでようやく整ってきたのかも……?
自分は不眠症によって人生の3分の1をドブに捨ててきたといっても過言ではなく、
それゆえ日中の眠気が払拭されれば実質的に活動時間が大幅に増えます。
もしかするとゲームとかをする余地も生まれてくるかもしれないし、
また現行の作業群はもっと捗るようになると思います。
いずれにしろ良いこと尽くめなので、もう一踏ん張り頑張りたいところ。

コメントを残す