static browser() {
        const ua = navigator.userAgent;
        let tem;
        let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];

        if (/trident/i.test(M[1])) {
            tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
            return { name: 'ie', version: (tem[1] || '') };
        }

        if (M[1] === 'Chrome') {
            tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
            if (tem !== null) {
                return { name: tem[1].replace('OPR', 'opera'), version: tem[2] };
            }
        }

        M = M[2]?[M[1], M[2]]:[navigator.appName, navigator.appVersion, '-?'];
        if ((tem = ua.match(/version\/(\d+)/i)) !== null) {
            M.splice(1, 1, tem[1]);
        }

        return { name: M[0].toLowerCase(), version: M[1] };
    }
Return an object containing the name and version of the current browser.
@example `browserVersion()` => { name: 'Firefox', version: '42' }
Based on http://stackoverflow.com/a/38080051/2834898

@returns {{ name: string, version: string }}