f581a093创建于 2023年7月28日历史提交
const root = typeof self !== 'undefined' ? self : this;

const _window = root || {};

// 变量库

const VariableLibrary = {

  navigator: typeof root.navigator !== 'undefined' ? root.navigator : {},

  // 信息map

  infoMap: {

    engine: ['WebKit', 'Trident', 'Gecko', 'Presto'],

    browser: [

      'Safari',

      'Chrome',

      'Edge',

      'IE',

      'Firefox',

      'Firefox Focus',

      'Chromium',

      'Opera',

      'Vivaldi',

      'Yandex',

      'Arora',

      'Lunascape',

      'QupZilla',

      'Coc Coc',

      'Kindle',

      'Iceweasel',

      'Konqueror',

      'Iceape',

      'SeaMonkey',

      'Epiphany',

      '360',

      '360SE',

      '360EE',

      'UC',

      'QQBrowser',

      'QQ',

      'Baidu',

      'Maxthon',

      'Sogou',

      'LBBROWSER',

      '2345Explorer',

      'TheWorld',

      'XiaoMi',

      'Quark',

      'Qiyu',

      'Wechat',

      'WechatWork',

      'Taobao',

      'Alipay',

      'Weibo',

      'Douban',

      'Suning',

      'iQiYi',

    ],

    os: [

      'Windows',

      'Linux',

      'Mac OS',

      'Android',

      'Ubuntu',

      'FreeBSD',

      'Debian',

      'iOS',

      'Windows Phone',

      'BlackBerry',

      'MeeGo',

      'Symbian',

      'Chrome OS',

      'WebOS',

    ],

  },

};

// 方法库

var MethodLibrary = (function () {

  return {

    // 获取匹配库

    getMatchMap: function (u) {

      return {

        // 内核

        Trident: u.indexOf('Trident') > -1 || u.indexOf('NET CLR') > -1,

        Presto: u.indexOf('Presto') > -1,

        WebKit: u.indexOf('AppleWebKit') > -1,

        Gecko: u.indexOf('Gecko/') > -1,

        // 浏览器

        Safari: u.indexOf('Safari') > -1,

        Chrome: u.indexOf('Chrome') > -1 || u.indexOf('CriOS') > -1,

        IE: u.indexOf('MSIE') > -1 || u.indexOf('Trident') > -1,

        Edge: u.indexOf('Edge') > -1,

        Firefox: u.indexOf('Firefox') > -1 || u.indexOf('FxiOS') > -1,

        'Firefox Focus': u.indexOf('Focus') > -1,

        Chromium: u.indexOf('Chromium') > -1,

        Opera: u.indexOf('Opera') > -1 || u.indexOf('OPR') > -1,

        Vivaldi: u.indexOf('Vivaldi') > -1,

        Yandex: u.indexOf('YaBrowser') > -1,

        Arora: u.indexOf('Arora') > -1,

        Lunascape: u.indexOf('Lunascape') > -1,

        QupZilla: u.indexOf('QupZilla') > -1,

        'Coc Coc': u.indexOf('coc_coc_browser') > -1,

        Kindle: u.indexOf('Kindle') > -1 || u.indexOf('Silk/') > -1,

        Iceweasel: u.indexOf('Iceweasel') > -1,

        Konqueror: u.indexOf('Konqueror') > -1,

        Iceape: u.indexOf('Iceape') > -1,

        SeaMonkey: u.indexOf('SeaMonkey') > -1,

        Epiphany: u.indexOf('Epiphany') > -1,

        360: u.indexOf('QihooBrowser') > -1 || u.indexOf('QHBrowser') > -1,

        '360EE': u.indexOf('360EE') > -1,

        '360SE': u.indexOf('360SE') > -1,

        UC: u.indexOf('UC') > -1 || u.indexOf(' UBrowser') > -1,

        QQBrowser: u.indexOf('QQBrowser') > -1,

        QQ: u.indexOf('QQ/') > -1,

        Baidu: u.indexOf('Baidu') > -1 || u.indexOf('BIDUBrowser') > -1,

        Maxthon: u.indexOf('Maxthon') > -1,

        Sogou: u.indexOf('MetaSr') > -1 || u.indexOf('Sogou') > -1,

        LBBROWSER: u.indexOf('LBBROWSER') > -1 || u.indexOf('LieBaoFast') > -1,

        '2345Explorer': u.indexOf('2345Explorer') > -1,

        TheWorld: u.indexOf('TheWorld') > -1,

        XiaoMi: u.indexOf('MiuiBrowser') > -1,

        Quark: u.indexOf('Quark') > -1,

        Qiyu: u.indexOf('Qiyu') > -1,

        Wechat: u.indexOf('MicroMessenger') > -1,

        WechatWork: u.indexOf('wxwork/') > -1,

        Taobao: u.indexOf('AliApp(TB') > -1,

        Alipay: u.indexOf('AliApp(AP') > -1,

        Weibo: u.indexOf('Weibo') > -1,

        Douban: u.indexOf('com.douban.frodo') > -1,

        Suning: u.indexOf('SNEBUY-APP') > -1,

        iQiYi: u.indexOf('IqiyiApp') > -1,

        // 系统或平台

        Windows: u.indexOf('Windows') > -1,

        Linux: u.indexOf('Linux') > -1 || u.indexOf('X11') > -1,

        'Mac OS': u.indexOf('Macintosh') > -1,

        Android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1,

        Ubuntu: u.indexOf('Ubuntu') > -1,

        FreeBSD: u.indexOf('FreeBSD') > -1,

        Debian: u.indexOf('Debian') > -1,

        'Windows Phone':

          u.indexOf('IEMobile') > -1 || u.indexOf('Windows Phone') > -1,

        BlackBerry: u.indexOf('BlackBerry') > -1 || u.indexOf('RIM') > -1,

        MeeGo: u.indexOf('MeeGo') > -1,

        Symbian: u.indexOf('Symbian') > -1,

        iOS: u.indexOf('like Mac OS X') > -1,

        'Chrome OS': u.indexOf('CrOS') > -1,

        WebOS: u.indexOf('hpwOS') > -1,

        // 设备

        Mobile:

          u.indexOf('Mobi') > -1 ||

          u.indexOf('iPh') > -1 ||

          u.indexOf('480') > -1,

        Tablet: u.indexOf('Tablet') > -1 || u.indexOf('Nexus 7') > -1,

        iPad: u.indexOf('iPad') > -1,

      };

    },

    // 在信息map和匹配库中进行匹配

    matchInfoMap: function (_this) {

      const u = VariableLibrary.navigator.userAgent || {};

      const match = MethodLibrary.getMatchMap(u);

      for (const s in VariableLibrary.infoMap) {

        for (let i = 0; i < VariableLibrary.infoMap[s].length; i++) {

          const value = VariableLibrary.infoMap[s][i];

          if (match[value]) {

            _this[s] = value;

          }

        }

      }

    },

    // 获取当前操作系统

    getOS: function () {

      const _this = this;

      MethodLibrary.matchInfoMap(_this);

      return _this.os;

    },

    // 获取操作系统版本

    getOSVersion: function () {

      const _this = this;

      const u = VariableLibrary.navigator.userAgent || {};

      _this.osVersion = '';

      // 系统版本信息

      const osVersion = {

        Windows: function () {

          const v = u.replace(/^.*Windows NT ([\d.]+);.*$/, '$1');

          const oldWindowsVersionMap = {

            6.4: '10',

            6.3: '8.1',

            6.2: '8',

            6.1: '7',

            '6.0': 'Vista',

            5.2: 'XP',

            5.1: 'XP',

            '5.0': '2000',

          };

          return oldWindowsVersionMap[v] || v;

        },

        Android: function () {

          return u.replace(/^.*Android ([\d.]+);.*$/, '$1');

        },

        iOS: function () {

          return u.replace(/^.*OS ([\d_]+) like.*$/, '$1').replace(/_/g, '.');

        },

        Debian: function () {

          return u.replace(/^.*Debian\/([\d.]+).*$/, '$1');

        },

        'Windows Phone': function () {

          return u.replace(/^.*Windows Phone( OS)? ([\d.]+);.*$/, '$2');

        },

        'Mac OS': function () {

          return u.replace(/^.*Mac OS X ([\d_]+).*$/, '$1').replace(/_/g, '.');

        },

        WebOS: function () {

          return u.replace(/^.*hpwOS\/([\d.]+);.*$/, '$1');

        },

      };

      if (osVersion[_this.os]) {

        _this.osVersion = osVersion[_this.os]();

        if (_this.osVersion == u) {

          _this.osVersion = '';

        }

      }

      return _this.osVersion;

    },

    // 浏览器信息

    getBrowserInfo: function () {

      const _this = this;

      MethodLibrary.matchInfoMap(_this);



      const u = VariableLibrary.navigator.userAgent || {};



      const _mime = function (option, value) {

        const mimeTypes = VariableLibrary.navigator.mimeTypes;

        for (const key in mimeTypes) {

          if (mimeTypes[key][option] == value) {

            return true;

          }

        }

        return false;

      };



      const match = MethodLibrary.getMatchMap(u);



      let is360 = false;

      if (_window.chrome) {

        const chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1');

        if (chrome_version > 36 && _window.showModalDialog) {

          is360 = true;

        } else if (chrome_version > 45) {

          is360 = _mime('type', 'application/vnd.chromium.remoting-viewer');

        }

      }

      if (match['Baidu'] && match['Opera']) {

        match['Baidu'] = false;

      }

      if (match['Mobile']) {

        match['Mobile'] = !(u.indexOf('iPad') > -1);

      }

      if (is360) {

        if (_mime('type', 'application/gameplugin')) {

          match['360SE'] = true;

        } else if (

          VariableLibrary.navigator &&

          typeof VariableLibrary.navigator['connection']['saveData'] ===

            'undefined'

        ) {

          match['360SE'] = true;

        } else {

          match['360EE'] = true;

        }

      }

      if (match['IE'] || match['Edge']) {

        const navigator_top = window.screenTop - window.screenY;

        switch (navigator_top) {

          case 71: // 无收藏栏,贴边

            break;

          case 74: // 无收藏栏,非贴边

            break;

          case 99: // 有收藏栏,贴边

            break;

          case 102: // 有收藏栏,非贴边

            match['360EE'] = true;

            break;

          case 75: // 无收藏栏,贴边

            break;

          case 105: // 有收藏栏,贴边

            break;

          case 104: // 有收藏栏,非贴边

            match['360SE'] = true;

            break;

          default:

            break;

        }

      }



      const browerVersionMap = {

        Safari: function () {

          return u.replace(/^.*Version\/([\d.]+).*$/, '$1');

        },

        Chrome: function () {

          return u

            .replace(/^.*Chrome\/([\d.]+).*$/, '$1')

            .replace(/^.*CriOS\/([\d.]+).*$/, '$1');

        },

        IE: function () {

          return u

            .replace(/^.*MSIE ([\d.]+).*$/, '$1')

            .replace(/^.*rv:([\d.]+).*$/, '$1');

        },

        Edge: function () {

          return u.replace(/^.*Edge\/([\d.]+).*$/, '$1');

        },

        Firefox: function () {

          return u

            .replace(/^.*Firefox\/([\d.]+).*$/, '$1')

            .replace(/^.*FxiOS\/([\d.]+).*$/, '$1');

        },

        'Firefox Focus': function () {

          return u.replace(/^.*Focus\/([\d.]+).*$/, '$1');

        },

        Chromium: function () {

          return u.replace(/^.*Chromium\/([\d.]+).*$/, '$1');

        },

        Opera: function () {

          return u

            .replace(/^.*Opera\/([\d.]+).*$/, '$1')

            .replace(/^.*OPR\/([\d.]+).*$/, '$1');

        },

        Vivaldi: function () {

          return u.replace(/^.*Vivaldi\/([\d.]+).*$/, '$1');

        },

        Yandex: function () {

          return u.replace(/^.*YaBrowser\/([\d.]+).*$/, '$1');

        },

        Arora: function () {

          return u.replace(/^.*Arora\/([\d.]+).*$/, '$1');

        },

        Lunascape: function () {

          return u.replace(/^.*Lunascape[\\/\s]([\d.]+).*$/, '$1');

        },

        QupZilla: function () {

          return u.replace(/^.*QupZilla[\\/\s]([\d.]+).*$/, '$1');

        },

        'Coc Coc': function () {

          return u.replace(/^.*coc_coc_browser\/([\d.]+).*$/, '$1');

        },

        Kindle: function () {

          return u.replace(/^.*Version\/([\d.]+).*$/, '$1');

        },

        Iceweasel: function () {

          return u.replace(/^.*Iceweasel\/([\d.]+).*$/, '$1');

        },

        Konqueror: function () {

          return u.replace(/^.*Konqueror\/([\d.]+).*$/, '$1');

        },

        Iceape: function () {

          return u.replace(/^.*Iceape\/([\d.]+).*$/, '$1');

        },

        SeaMonkey: function () {

          return u.replace(/^.*SeaMonkey\/([\d.]+).*$/, '$1');

        },

        Epiphany: function () {

          return u.replace(/^.*Epiphany\/([\d.]+).*$/, '$1');

        },

        360: function () {

          return u.replace(/^.*QihooBrowser\/([\d.]+).*$/, '$1');

        },

        '360SE': function () {

          const hash = {

            63: '10.0',

            55: '9.1',

            45: '8.1',

            42: '8.0',

            31: '7.0',

            21: '6.3',

          };

          const chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1');

          return hash[chrome_version] || '';

        },

        '360EE': function () {

          const hash = {

            69: '11.0',

            63: '9.5',

            55: '9.0',

            50: '8.7',

            30: '7.5',

          };

          const chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1');

          return hash[chrome_version] || '';

        },

        Maxthon: function () {

          return u.replace(/^.*Maxthon\/([\d.]+).*$/, '$1');

        },

        QQBrowser: function () {

          return u.replace(/^.*QQBrowser\/([\d.]+).*$/, '$1');

        },

        QQ: function () {

          return u.replace(/^.*QQ\/([\d.]+).*$/, '$1');

        },

        Baidu: function () {

          return u.replace(/^.*BIDUBrowser[\s\\/]([\d.]+).*$/, '$1');

        },

        UC: function () {

          return u.replace(/^.*UC?Browser\/([\d.]+).*$/, '$1');

        },

        Sogou: function () {

          return u

            .replace(/^.*SE ([\d.X]+).*$/, '$1')

            .replace(/^.*SogouMobileBrowser\/([\d.]+).*$/, '$1');

        },

        LBBROWSER: function () {

          let version = '';

          if (u.indexOf('LieBaoFast') > -1) {

            version = u.replace(/^.*LieBaoFast\/([\d.]+).*$/, '$1');

          }

          const hash = {

            57: '6.5',

            49: '6.0',

            46: '5.9',

            42: '5.3',

            39: '5.2',

            34: '5.0',

            29: '4.5',

            21: '4.0',

          };

          const chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1');

          return version || hash[chrome_version] || '';

        },

        '2345Explorer': function () {

          return u.replace(/^.*2345Explorer\/([\d.]+).*$/, '$1');

        },

        TheWorld: function () {

          return u.replace(/^.*TheWorld ([\d.]+).*$/, '$1');

        },

        XiaoMi: function () {

          return u.replace(/^.*MiuiBrowser\/([\d.]+).*$/, '$1');

        },

        Quark: function () {

          return u.replace(/^.*Quark\/([\d.]+).*$/, '$1');

        },

        Qiyu: function () {

          return u.replace(/^.*Qiyu\/([\d.]+).*$/, '$1');

        },

        Wechat: function () {

          return u.replace(/^.*MicroMessenger\/([\d.]+).*$/, '$1');

        },

        WechatWork: function () {

          return u.replace(/^.*wxwork\/([\d.]+).*$/, '$1');

        },

        Taobao: function () {

          return u.replace(/^.*AliApp\(TB\/([\d.]+).*$/, '$1');

        },

        Alipay: function () {

          return u.replace(/^.*AliApp\(AP\/([\d.]+).*$/, '$1');

        },

        Weibo: function () {

          return u.replace(/^.*weibo__([\d.]+).*$/, '$1');

        },

        Douban: function () {

          return u.replace(/^.*com.douban.frodo\/([\d.]+).*$/, '$1');

        },

        Suning: function () {

          return u.replace(/^.*SNEBUY-APP([\d.]+).*$/, '$1');

        },

        iQiYi: function () {

          return u.replace(/^.*IqiyiVersion\/([\d.]+).*$/, '$1');

        },

      };

      _this.browserVersion = '';

      if (browerVersionMap[_this.browser]) {

        _this.browserVersion = browerVersionMap[_this.browser]();

        if (_this.browserVersion == u) {

          _this.browserVersion = '';

        }

      }

      if (_this.browser == 'Chrome' && u.match(/\S+Browser/)) {

        _this.browser = u.match(/\S+Browser/)[0];

        _this.version = u.replace(/^.*Browser\/([\d.]+).*$/, '$1');

      }



      return {

        browser: _this.browser,

        browserVersion: _this.browserVersion,

      };

    },

  };

})();

const info = {

  OS: MethodLibrary.getOS(), // 操作系统

  OSVersion: MethodLibrary.getOSVersion(), // 操作系统版本

  browserInfo: MethodLibrary.getBrowserInfo(), // 浏览器信息

};

const xhr = new XMLHttpRequest();

xhr.responseType = 'json';

xhr.open('get', '/ip-api/', true);

xhr.onload = function (e) {

  if (xhr.status === 200) {

    window['returnCitySN'] = xhr.response;

  } else {

    window['returnCitySN'] = {

      query: '',

      city: '',

    };

  }

};

xhr.onerror = () => {

  window['returnCitySN'] = {

    query: '',

    city: '',

  };

};

xhr.send();



let sensors = window['sensorsDataAnalytic201505'];

function initSensor() {

  window['sensorsCustomBuriedData'] = {

    language: location.pathname.split('/')[1] || 'en',

    ip: (window['returnCitySN'] && window['returnCitySN'].query) || '',

    city: (window['returnCitySN'] && window['returnCitySN'].city) || '',

    os: info.OS,

    osVersion: info.OSVersion,

    browser: info.browserInfo.browser,

    browserVersion: info.browserInfo.browserVersion,

  };



  window['setSensorsCustomBuriedData'] = (key, value) => {

    window['sensorsCustomBuriedData'][key] = value;

  };

  sensors.init({

    server_url: 'https://dsapi.osinfra.cn/query/track?community=openGauss',

    use_client_time: true,

    // 调试时开启

    show_log: false,

    send_type: 'image',

    is_track_single_page: function () {

      return window['sensorsCustomBuriedData'];

    },

    heatmap: {

      //是否开启点击图,default 表示开启,自动采集 $WebClick 事件,可以设置 'not_collect' 表示关闭。

      clickmap: 'default',

      custom_property: function () {

        return window['sensorsCustomBuriedData'];

      },

      //是否开启触达图,not_collect 表示关闭,不会自动采集 $WebStay 事件,可以设置 'default' 表示开启。

      scroll_notice_map: 'not_collect',

    },

  });

  sensors.quick('isReady', function () {

    sensors.getPresetProperties();

  });



  // 给category增加两个值

  // sensors.appendProfile({catrgory: ['test_start_time', 'test_end_time']});

  // sensors.appendProfile({catrgory: 'test_exist_time'});

  sensors.quick('autoTrack', window['sensorsCustomBuriedData']); //用于采集 $pageview 事件。\

}

function startSensor(num) {

  if (!num) {

    // 重试最大次数

    return;

  }

  if (sensors) {

    initSensor();

  } else {

    setTimeout(() => {

      // 若是一开始没有值,则重试

      sensors = window['sensorsDataAnalytic201505'];

      num--;

      startSensor(num);

    }, 500);

  }

}

startSensor(20);