通过UA区分QQ环境,QQ内置浏览器环境,QQ浏览器环境(最准确!!)

801 阅读1分钟
const getUserAgent = (ua?: string) => {
    if (ua) {
        return ua.toLowerCase();
    }
    return typeof window !== 'undefined' && navigator.userAgent ? navigator.userAgent.toLowerCase() : '';
};
const isAndroid = (userAgent?: string) => {
    return /android/i.test(getUserAgent(userAgent));
};
const isIos = (userAgent?: string) => {
    const ua = getUserAgent(userAgent);
    return /iphone os/i.test(ua) || /ipad/i.test(ua);
};
/** QQ环境 */
const isQQ = (userAgent?: string) => {
    return /qq/i.test(getUserAgent(userAgent));
};
/** QQ浏览器环境 */
const isQQBrowser = (userAgent?: string) => {
    const ua = getUserAgent(userAgent);
    /** QQ浏览器的uaMQQBrowser */
    const _isIosQQ = isIos() && ua.indexOf('mqqbrowser') > -1
    /** QQ内置环境的ua中有关键字 MQQBrowser, 并且后面有一个QQ字符,QQ浏览器则没有。 */
    const _isAndroidQQ = isAndroid() && /mqqbrowser/i.test(ua) && !( /qq/i.test((ua).split('mqqbrowser').join('')));
    return _isIosQQ || _isAndroidQQ
};

/** QQ内置浏览器环境 */
const isQQApp = (userAgent?: string) => {
    const ua = getUserAgent(userAgent);
    /** QQ内置浏览器的ua包含一个空格加QQ,但是不包含MQQBrowser */
    const _isIosQQ = isIos() && /\sqq/i.test(ua);
    /** QQ内置环境的ua中有关键字 MQQBrowser, 并且后面有一个QQ字符,QQ浏览器则没有。 */
    const _isAndroidQQ = isAndroid() && /mqqbrowser/i.test(ua) && /qq/i.test((ua).split('mqqbrowser').join(''));
    return _isIosQQ || _isAndroidQQ;
};