diff --git a/src/core/service/api/ui/create-media-query-observer.js b/src/core/service/api/ui/create-media-query-observer.js index 634f6ccd24e9c543dd628c3825f0640717d7cf4c..bbd3221bdb1ba0f62944c9519e867c54fedf60ba 100644 --- a/src/core/service/api/ui/create-media-query-observer.js +++ b/src/core/service/api/ui/create-media-query-observer.js @@ -2,7 +2,9 @@ import createCallbacks from 'uni-helpers/callbacks' import { getCurrentPageVm } from '../../platform' - +import { + checkInWindows +} from 'uni-helpers/windows' const createMediaQueryObserverCallbacks = createCallbacks('requestMediaQueryObserver') class ServiceMediaQueryObserver { @@ -24,13 +26,13 @@ class ServiceMediaQueryObserver { reqId: this.reqId, component: this.component, options: this.options - }) + }, checkInWindows(this.component) ? this.component : this.pageId) } disconnect () { UniServiceJSBridge.publishHandler('destroyMediaQueryObserver', { reqId: this.reqId - }) + }, checkInWindows(this.component) ? this.component : this.pageId) } } diff --git a/src/core/view/bridge/subscribe/api/request-media-query-observer.js b/src/core/view/bridge/subscribe/api/request-media-query-observer.js index e26e3e1aa3e18e64e6d66bfdda3366b26f91b2f6..eebec167ea56e29279fee5018d6ed744b0675c6f 100644 --- a/src/core/view/bridge/subscribe/api/request-media-query-observer.js +++ b/src/core/view/bridge/subscribe/api/request-media-query-observer.js @@ -34,6 +34,18 @@ export function requestMediaQueryObserver ({ reqId, options }, pageId) { + let pageVm + if (pageId._isVue) { + pageVm = pageId + } else { + const pages = getCurrentPages() // 跨平台时,View 层也应该实现该方法,举例 App 上,View 层的 getCurrentPages 返回长度为1的当前页面数组 + const page = pages.find(page => page.$page.id === pageId) + if (!page) { + throw new Error(`Not Found:Page[${pageId}]`) + } + pageVm = page.$vm + } + // 创建一个媒体查询对象 const mediaQueryObserver = mediaQueryObservers[reqId] = window.matchMedia(handleMediaQueryStr(options)) @@ -42,7 +54,7 @@ export function requestMediaQueryObserver ({ UniViewJSBridge.publishHandler('onRequestMediaQueryObserver', { reqId, res: e.matches - }) + }, pageVm.$page.id) } listener(mediaQueryObserver) // 监听前执行一次媒体查询