UniApp 中替代 `document` 的推荐做法(适配安卓 App、小程序、H5)

在 UniApp 中,原生 App 环境不是运行在浏览器中,无法使用 document.getElementByIddocument.querySelector 等 Web API。建议使用以下方式替代。


✅ 推荐 1:使用 ref 引用元素

<template>
  <view ref="myView">内容</view>
</template>

<script setup>
import { onMounted, ref } from 'vue'

const myView = ref(null)

onMounted(() => {
  // 虽然不能直接获取 DOM,但可以获取组件引用
  console.log('myView:', myView.value)
})
</script>

✅ 推荐 2:使用 uni.createSelectorQuery 获取元素位置/尺寸

<template>
  <view class="my-view">测试内容</view>
</template>

<script setup>
import { onMounted } from 'vue'

onMounted(() => {
  const query = uni.createSelectorQuery().in(uni)
  query.select('.my-view').boundingClientRect(data => {
    console.log('元素位置和大小:', data)
  }).exec()
})
</script>

❌ 不推荐使用(App端无效)

// 以下在 App 中不可用
document.getElementById('myView')
document.querySelector('.my-view')
document.body
window.addEventListener('resize', () => {})

✅ 替代方案总结表

不推荐 Web API推荐写法
document.getElementById使用 refuni.createSelectorQuery()
document.querySelector使用 uni.createSelectorQuery()
document.body控制布局用组件或响应式变量
window.addEventListener使用生命周期 onShow/onHide

🌟 推荐始终使用 refuni.createSelectorQuery 来替代浏览器 API,这样能确保你的代码在 App、小程序和 H5 都能正常运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非鱼牛马社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值