Edited at

Android 9 の UserAgent でバージョン表記に小数点以下がない


発生した問題

Android 9 端末(PIXELとか)で、公開済みサイトの表示不具合が発生していた。


原因

使用している UserAgent 判定ライブラリが問題だった。

Android 9 の UserAgent は小数点以下が省略されていて、バージョン判定の正規表現が正しくヒットしていなかったことが原因。


参考:AU技術情報

https://www.au.com/developer/android/kishu/ua/

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