発生した問題
Android 9 端末(PIXELとか)で、公開済みサイトの表示不具合が発生していた。
原因
使用している UserAgent 判定ライブラリが問題だった。
Android 9 の UserAgent は小数点以下が省略されていて、バージョン判定の正規表現が正しくヒットしていなかったことが原因。
参考:AU技術情報
Android 8 の場合、 8.0.0
とかだったのに、 Android 9 の場合、 9
のみ。
問題のコード
if(info.separator){
let os = ua.split(info.separator).pop().split(' ').shift().replace(/_/g, '.').replace(/;/g, '');
os = Number(os.match(/^\d*\.\d*/).shift()); // 小数点以下がある前提
info.version = os;
}
修正したコード
- os = Number(os.match(/^\d+\.\d+/).shift()); // 小数点がある前提
+ os = Number(os.match(/(^\d+\.\d+|\d)|^\d+/).shift()); // 小数点がない場合も含む
まとめ
今回使用していた UserAgent 判定ライブラリの正規表現にも問題があるが、バージョン表記のルールを突然変えないでほしい。。。
参照情報
Android 9: Exception on plugin load due to issue with UA parsing #1404