import { supportsPassive } from 'uni-shared' import { setLocale } from 'uni-core/helpers/i18n' import { disableScroll as disableScrollListener, createScrollListener } from 'uni-core/view/bridge/subscribe/scroll' import { ON_PAGE_CREATE } from '../../constants' import { WEBVIEW_READY, SET_LOCALE } from '../../../constants' const passiveOptions = supportsPassive ? { passive: false } : false function onCssVar ({ statusbarHeight, windowTop, windowBottom }) { global.__WINDOW_TOP = windowTop global.__WINDOW_BOTTOM = windowBottom if (uni.canIUse('css.var')) { const style = document.documentElement.style // TODO style.setProperty('--window-left', '0px') style.setProperty('--window-right', '0px') style.setProperty('--window-top', windowTop + 'px') style.setProperty('--window-bottom', windowBottom + 'px') style.setProperty('--status-bar-height', statusbarHeight + 'px') if (process.env.NODE_ENV !== 'production') { console.log(`--status-bar-height=${statusbarHeight}`) console.log(`--window-top=${windowTop}`) console.log(`--window-bottom=${windowBottom}`) } } } function onPageCreate ({ locale, statusbarHeight, windowTop, windowBottom, disableScroll, onPageScroll, onPageReachBottom, onReachBottomDistance }, pageId) { setLocale(locale) onCssVar({ statusbarHeight, windowTop, windowBottom }) if (disableScroll) { document.addEventListener('touchmove', disableScrollListener, passiveOptions) } else if (onPageScroll || onPageReachBottom) { requestAnimationFrame(function () { // 避免监听太早,直接触发了 scroll document.addEventListener('scroll', createScrollListener(pageId, { enablePageScroll: onPageScroll, enablePageReachBottom: onPageReachBottom, onReachBottomDistance })) }) } } function onWebviewReady () { // service 主动发起检测 UniViewJSBridge.publishHandler('webviewReady') } export default function initSubscribe (subscribe) { subscribe(WEBVIEW_READY, onWebviewReady) subscribe(ON_PAGE_CREATE, onPageCreate) subscribe(SET_LOCALE, setLocale) }