initialization.js 6.04 KB
var firstTime = new Date()
let appH5Height = 0
var errorStatus = false
var contentId = 0
// 是否读取到了app透传的额外的信息(主要是登录信息)
var hasAppLoginExtra = false
// 是否展示了文章详情
var startShowArticle = false
// 详情数据是否获取到
var hasDetails = false
// 延长判断页面展示是否超过200ms
var pageLoadOutTime = null
// 页面加载时间是否超时
var slow = false
// 页面加载时间是否很短
var fast = false
// 模拟页面加载语法报错
var pageError = false
// userAgent
const userAgent = navigator.userAgent
// 页面加载模式
var darkMode = 'light'
// var darkMode = 'dark'
// 页面主进程进度
var mainProcessProgress = {}

/**
 * @Author      gx12358
 * @DateTime    2024/7/31
 * @lastTime    2024/7/31
 * @description 时间
 */
function getTime() {
  const now = new Date()

  const hours = now.getHours().toString().padStart(2, '0')
  const minutes = now.getMinutes().toString().padStart(2, '0')
  const seconds = now.getSeconds().toString().padStart(2, '0')
  const secondss = now.getMilliseconds().toString().padStart(2, '0')

  return `${hours}:${minutes}:${seconds}:${secondss}`
}

console.log('页面开始加载资源:' + getTime())

function initAppDarkMode() {
  darkMode = userAgent.includes('dark') ? 'dark' : darkMode
  document
  .querySelector('html')
  .setAttribute('dark-mode', darkMode === 'dark')
}

/**
 * @Author      gx12358
 * @DateTime    2024/7/31
 * @lastTime    2024/7/31
 * @description 判断页面读取到详情数据所需要时间
 */
function checkPageLoadingTimeOut() {
  clearTimeout(pageLoadOutTime)
  pageLoadOutTime = null

  pageLoadOutTime = setTimeout(() => {
    clearTimeout(pageLoadOutTime)
    pageLoadOutTime = null
    if (!hasDetails) {
      console.log(`页面展示超过${200}毫秒`)
      if (document.querySelector('.error-block').style.display === 'block') {
        return
      }
      if (document.querySelector('.skeleton-loading').classList.contains('active')) {
        document.querySelector('.skeleton-loading').classList.remove('active')
      }
    } else {
      // console.log(`页面展示小于${time}毫秒`)
    }
  }, 200)
}

/**
 * @Author      gx12358
 * @DateTime    2024/7/31
 * @lastTime    2024/7/31
 * @description 加载资源方法
 */
function loadFile(doc, obj = {}, fn) {
  var tmpList = []
  var item = null
  for (
    var i = 0, ci; (
    ci = tmpList[i++]
  );
  ) {
    if (ci.doc === doc && ci.url == (
      obj.src || obj.href
    )) {
      item = ci
    }
  }
  if (item) {
    if (item.ready) {
      fn && fn()
    } else {
      item.funs.push(fn)
    }
    return
  }
  tmpList.push({
    doc: doc,
    url: obj.src || obj.href,
    funs: [ fn ]
  })
  if (!doc.body) {
    var html = []
    for (var p in obj) {
      if (p == 'tag') continue
      html.push(p + '="' + obj[p] + '"')
    }
    doc.write(
      '<' + obj.tag + ' ' + html.join(' ') + ' ></' + obj.tag + '>'
    )
    return
  }
  if (obj.id && doc.getElementById(obj.id)) {
    return
  }
  var element = doc.createElement(obj.tag)
  delete obj.tag
  for (var p in obj) {
    element.setAttribute(p, obj[p])
  }
  element.onload = element.onreadystatechange = function () {
    if (!this.readyState || /loaded|complete/.test(this.readyState)) {
      for (
        var k = 0, ck; (
        ck = tmpList[k++]
      );
      ) {
        if (ck.doc === doc && ck.url == (
          obj.src || obj.href
        )) {
          item = ck
        }
      }
      if (item.funs.length > 0) {
        item.ready = 1
        for (
          var fi; (
          fi = item.funs.pop()
        );
        ) {
          fi()
        }
      }
      element.onload = element.onreadystatechange = null
    }
  }
  element.onerror = function () {
    throw Error(
      'The load ' +
      (
        obj.href || obj.src
      ) +
      ' fails,check the url settings of file ueditor.config.js '
    )
  }
  doc.getElementsByTagName('head')[0].appendChild(element)
}

/**
 * @Author      gx12358
 * @DateTime    2024/7/31
 * @lastTime    2024/7/31
 * @description 判断设备类型
 */
function judgTerminal() {
  try {
    /* 返回当前的用户代理(User Agent)字符串 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1' */
    const u = navigator.userAgent
    const isXiaomi = u.indexOf('XiaoMi') > -1 // 小米手机
    const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1 // 其它安卓
    const isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) // ios
    const isHarmony = u.indexOf('ArkWeb') > -1 // 鸿蒙
    if (isAndroid) {
      return 1
    } else if (isIOS) {
      if (isXiaomi) {
        return 1
      } else {
        return 2
      }
    }else if (isHarmony){
      return 2
    }

    return 1
  } catch (e) {
    return 1
  }
}

/**
 * @Author      gx12358
 * @DateTime    2024/7/31
 * @lastTime    2024/7/31
 * @description 页面高度变化 - 给到app
 */
function changeContentHtmlHeight(options = {}) {
  try {
    if (document.querySelector(options.str || '.gx-mobile')) {
      const height = document.querySelector(options.str || '.gx-mobile').getBoundingClientRect().height
      if ((appH5Height !== height) || options.report) {
        appH5Height = height
        // console.info(`${options.str || '.gx-mobile'}`, appH5Height)

        // 两种方式拿到的值是一样的
        try {
          sendNative(
            'jsCall_currentPageOperate',
            {
              //当 operateType == 8,传webview的新高度给App使其更新web容器高度
              operateType: '8',
              webViewHeight: `${appH5Height}`
            },
            res => { }
          )
        } catch (e) {
          console.info('error-html-height', e)
        }
      } else {
        if (options.type && options.type === 'done') {
          if (window.config.VUE_BASE_NODE === 'dev') {
            console.log('高度', options.type || 'done', appH5Height)
          }
        }
      }
    }
  } catch (e) {
    // console.info('error-html-height', e)
  }
}

initAppDarkMode()