iOS7で遭遇した

ブラウザバグ達

文殊堂

自己紹介

  • GitHub
  • 興味あったら後で見て下さい
  • 時間がないので略

historyが消える

  • iOS7.0から発生
  • Application Cacheが設定され、キャッシュ済みのページに遷移すると一つ前のブラウザ履歴が消える
  • デモページ

ワークアラウンド

遷移前のページに、当該ページヘのリンクがクリックされたら、空の履歴を挿入した後、リンク先URLに遷移する処理を入れた。

空の履歴が消滅することで正常動作しているように振る舞う。

コード

    document.addEventListener('click', function (ev) {
      // 指定されたselector or その子孫の場合のみリンクの遷移を止める
      if (!ev.target.webkitMatchesSelector(selector + ',' + selector + ' *')) {
        return;
      }
      ev.preventDefault();
      var aElem = ev.target;
      while (!aElem.webkitMatchesSelector(selector)) {
        aElem = aElem.parentElement;
      }
      history.pushState(null, null);
      location.replace(aElem.href);
    }, false);

CanvasのdrawImageバグ

  • iOS7.1から発生
  • コピー元画像の切り出し領域の高さが指定した値より大きくなってしまう
  • コピー元のimg要素の画像がjpegの時だけ発生
    • 原因不明
  • シミュレーターでは再現せず
    • 発見の遅れ

CanvasRenderingContext2D#drawImage

  • 参考URL
  • これのshが指定した値より大きくなっていた
void drawImage(image, float sx, float sy,
               float sw, float sh,
               float dx, float dy,
               float dw, float dh)

ワークアラウンド

  • iOS7.1でjpegの場合のみshを0.1px減らして指定
  • 理由は分からないが正常な画像とのdiffが一番少なかったのがこの数値だった

これらのバグはiOS8で修正

  • Apple偉い

One more thing...

iOS8で遭遇した

ブラウザバグ

XHRでブラウザクラッシュ

  • iOS6からSafari/WebViewでは同時接続数が1個になっていた
  • iOS8で晴れて2個以上に戻った
  • 複数のXHRでレスポンスの受信時間がかぶるとクラッシュ
    • 同時接続数が増えた意味が無い
  • その他よく分からない理由でクラッシュ
  • iOS8.2betaの時点で直っていない

番外

Promiseが詰まる

  • iOS8beta5から発生
  • Application Cacheを設定したページで発生するらしい
Promise.resolve().
then(function(){console.log('hoge')});
  • 絶対にlogが出力されるはずのコードでlogが出力されない
  • iOS8GM版で直った
    • ので問題ありません

iOS7,8で遭遇した

様々なブラウザバグ達

ご清聴ありがとうございました

Made with Slides.com