Quasar 平台检测

Quasar 提供了工具来检测代码运行在哪个平台上。

TIP

根据您的需要,您可能还需要去 Style & Identity > Visibility 页面看看如何使用 CSS 实现相同的功能。但是 CSS 方案无论在任何平台上始终都会渲染 DOM 或组件,所以根据您想要的应用程序性能来选择一个合适的方案。

用法

在 Vue 组件的 JS 中:

import { useQuasar } from 'quasar'

setup () {
  const $q = useQuasar()

  $q.platform.is.mobile
}

在 Vue 组件的模版中:

$q.platform.is.cordova

如果在一个 vue 文件之外使用,您需要像下述方式引入它:

import { Platform } from 'quasar'

Platform.is 对象会返回当前代码运行平台的详细信息,类似:

{
  chrome: true,
  desktop: true,
  mac: true,
  name: "chrome",
  platform: "mac",
  version: "70.0.3538.110",
  versionNumber: 70,
  webkit: true
}

来看看如何控制在不同的平台上显示不同的 DOM 或组件:

<div v-if="$q.platform.is.desktop">
  I'm only rendered on desktop!
</div>

<div v-if="$q.platform.is.mobile">
  I'm only rendered on mobile!
</div>

<div v-if="$q.platform.is.electron">
  I'm only rendered on Electron!
</div>



属性列表

下表是 Platform 对象的部分可用属性,完整的列表请见 API 部分。

PropertyTypeMeaning
Platform.is.mobileBoolean代码是否运行在移动设备上? on a mobile 设备上?
Platform.is.cordovaBoolean代码是否运行在 Cordova?
Platform.is.capacitorBoolean代码是否运行在 Capacitor?
Platform.is.electronBoolean代码是否运行在 Electron?
Platform.is.desktopBoolean代码是否运行在桌面浏览器上?
Platform.is.bexBoolean代码是否运行在浏览器插件中?
Platform.is.androidBooleanapp 是否运行在 Android 设备上?
Platform.is.blackberryBooleanapp 是否运行在 Blackberry 设备上?
Platform.is.crosBooleanapp 是否运行在 Chrome OS 操作系统上?
Platform.is.iosBooleanapp 是否运行在 iOS 设备上?
Platform.is.ipadBooleanapp 是否运行在 iPad 上?
Platform.is.iphoneBooleanapp 是否运行在 iPhone 上?
Platform.is.ipodBooleanapp 是否运行在 iPod 上?
Platform.is.kindleBooleanapp 是否运行在 Kindle 设备上?
Platform.is.linuxBoolean代码是否运行在 Linux 操作系统上?
Platform.is.macBoolean代码是否运行在 MacOS 操作系统上?
Platform.is.winBoolean代码是否运行在 Windows 操作系统上?
Platform.is.winphoneBoolean代码是否运行在 Windows Phone 设备上?
Platform.is.playbookBoolean代码是否运行在 Blackberry Playbook 设备上?
Platform.is.silkBoolean代码是否运行在 the Kindle Silk 浏览器内?
Platform.is.chromeBoolean代码是否运行在 Google Chrome 浏览器内?
Platform.is.operaBoolean代码是否运行在 Opera 浏览器内?
Platform.is.safariBoolean代码是否运行在 Apple Safari 浏览器内?
Platform.is.edgeBoolean代码是否运行在 Microsoft Edge 浏览器内?
Platform.is.ieBoolean代码是否运行在 Microsoft Internet Explorer 浏览器内?
Platform.has.touchBoolean代码是否运行在具有可触摸的屏幕的设备上?
Platform.within.iframeBooleanapp 是否运行在一个 IFRAME 标签中?

TIP

运行在移动设备上代表着,可能运行在手机或者手表的浏览器内,并不代表着运行在 Cordova 内

关于 SSR 的注意事项

在 SSR 应用中只能使用$q.platform的形式,如果需要在 server 端使用 import { Platform } from 'quasar' ,您需要这样做::

import { Platform } from 'quasar'

// you need access to `ssrContext`
function (ssrContext) {
  const platform = process.env.SERVER
    ? Platform.parseSSR(ssrContext)
    : Platform // otherwise we're on client

  // platform is equivalent to the global import as in non-SSR builds
}

其中的ssrContext 可以在 @quasar/app-vite Boot File 或者 @quasar/app-webpack Boot File文件中访问到。 也可以在 @quasar/app-vite preFetch 或者 @quasar/app-webpack preFetch中访问到,ssrContext 会作为函数的参数,在上述文件的函数中访问。

这一切的原因是,在一个仅客户端的应用程序中,每个用户将使用的一个新的实例应用在浏览器内。对于服务器端渲染,我们也希望如此:每个请求都应该有一个新的、独立的应用实例,这样就不会有交叉请求的状态污染。因此,Platform 需要分别绑定到每个请求。

API

Loading Platform API...