// bili-mirror 告警上报 const isBilibili = location.host.includes('bilibili.com') const isSpider = !(navigator && navigator.userAgent) || /bot|spider/i.test(navigator.userAgent) if (isBilibili && !isSpider) { class MirrorErrorFilterPlugin { static get errorFilterList() { return ['extension', 'log-reporter', '/bfs/static/player/main', 'static.geetest.com'] } static get rejectionFilterList() { return ['extension', 'aborted', 'failed', 'timeout', 'network', 'log-reporter', '/bfs/static/player/main'] } static get resourceFilterList() { return ['extension', '/bfs/archive'] } checkInWhitelist(list, message, stack) { if (!list || !list.length) return false if (!message) return false const isMsgMatch = list.some(str => { return message.toLowerCase().includes(str) }) const isStackMatch = stack.some(str => { return list.some(s => str.toLowerCase().includes(s)) }) return isMsgMatch || isStackMatch } mirrorHandleBefore(type, data) { return new Promise(resolve => { if (type === 'error') { const isMatch = this.checkInWhitelist( MirrorErrorFilterPlugin.errorFilterList, data?.message || '', data?.stack || [] ) return resolve(!isMatch) } else if (type === 'unhandledrejection') { const isMatch = this.checkInWhitelist( MirrorErrorFilterPlugin.rejectionFilterList, data?.message || '', data?.stack || [] ) return resolve(!isMatch) } else if (type === 'resource') { const cookieMid = /DedeUserID=(.+?);/.exec(document.cookie) if (!cookieMid) { return resolve(false) } const isMatch = this.checkInWhitelist( MirrorErrorFilterPlugin.resourceFilterList, data?.message || '', data?.stack || [] ) return resolve(!isMatch) } resolve(true) }) } mirrorHandleAfter() { return Promise.resolve() } } window.__MIRROR_CONFIG__ = { origin: 'main', module: 'home-page', spmId: '333.1007', plugins: new MirrorErrorFilterPlugin(), config: { isAutoInit: true, whiteScreen: { maxLoop: 10, checkDom: ['#i_cecream', '.bili-feed4-layout', '.bili-mini-mask', '.geetest_panel_ghost', '#bewly', '.home-redesign-base', '.bilibili-helper-dark-mode', '.bili-wrapper'], callback: status => { console.log('白屏检测是否正常', status) }, isSkeleton: false } } } }