Category Archives: JavaScript

iOSとwindow.onloadにまつわる不具合

現在のWordPressでは[video]や[audio]ショートコードを使えば、プラグイン等を使用しなくても映像/音声ファイルをサイト上に読み込んで再生出来る訳ですが、、、

これらを読み込んだページで、iOS上で一部のJavaScriptが動作しなくなる不具合が発生しました。調べてみるとjQueryの

jQuery( window ).load( function(){ …
が動作しなくなってました。

Googleの検索窓に「iOS window.onload」と打ち込んでいくと、自動参照されてwindow onload not working iosてキーワードが浮かんできます。どうやらウチ固有の現象ではないらしい…とちょっと安心(…してちゃいかんのですが…)

ウチの再現環境は、iOS 6.1.3 / iPhone4S & iPad mini。
(一応WordPressのバージョンも。2013/08/28時点の最新版ver.3.6です。)
先の検索結果をいくつかザッと眺めてみたんですが、今のところ決定的な対処法は見つかってないみたいですね。

[video]や[audio]が無ければ動作してますので、embed系の読み込みがあるとwindow描画の完了通知を出さなくなるんでしょうか?
だったらひょっとして読み込み完了したらonload吐くんじゃないかとしばらく放置してみましたが、やっぱりダメみたいです。


ウチでのonloadイベントの用途は、AdSenseやTwitterの外部ウィジェットやサイトのトップ画像の読み込み完了したら描画を再調整する、というものだったので、iOSに限りサイト開いた直後の1分程度の間
settimeoutループを数秒周期で回して、必要ブツが読み込まれていたら対応するfunctionを走らせる、
というやり方で対処
しました。
美しくないですが、仕方ないですね。。。

ただWordPressプラグインの中にもwindow.onloadイベントを参照してるモノがあるようで、ウチではSyntaxHighlighterが動かなくなりました。まぁタイムライン上に[video]や[audio]が含まれる別記事が並んでなければちゃんと動きますので、当面コレは諦めます。

更にpluginsフォルダの中をgrepして他のソースも覗くと、Akismetなんかも jQuery( window ).load( function(){ 使ってますね。
ソースを具体的に読んでないのでどの程度影響があるか分かりませんが、Akismetの動作を考えるとクライアント側のwindow.onloadが働かないからといって、本来のスパム排除という機能が動作しなくなる可能性は低そうですし、万が一動かないとしてもiPadやiPhoneからスパム攻撃仕掛ける変態さんがそうそう居るとも思えないので、ま大丈夫かな:p…と。