uni-app中自己开发的vue/html是否运行在webview中及js中document/window对象报错原因

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app中自己开发的vue/html是否运行在webview中及js中document/window对象报错原因
我的vue3代码中引入了其他厂商的组件,在HarmonyNext下提示 document undefined. 这个vue3的代码不是在webview里面运行的吗?这些代码在PC端,手机浏览器中都能正常运行,偏偏在HarmonyNext下运行失败? 另外,不是在harmonyNext中的webview中运行原始的vue3文件吗? 怎么好像是编译成 app-harmony1.3.7\entry\src\main\resources\rawfile\apps\HBuilder\www\app-service.js来运行?


4 回复

所有app平台和小程序一样,逻辑层在独立js引擎里。https://uniapp.dcloud.net.cn/tutorial/performance.html


那么很多基于浏览器js的库无法引用,那么不修改js库的源码,可以转换吗?如 document转成XXX后使用基于浏览器js的库

???有人回答吗

在uni-app中,自己开发的Vue/HTML组件确实是在WebView中运行的,尤其是在跨平台(如小程序、H5、App等)的上下文中。uni-app使用Vue.js开发多端应用,其底层通过不同的渲染引擎来实现跨平台兼容,其中WebView是一个关键的组件,用于在App和小程序等环境中承载Web内容。

关于documentwindow对象报错的原因,这通常发生在uni-app的特定平台环境中,尤其是非Web平台(如微信小程序、App的Native环境)。在标准的Web环境中,documentwindow是全局可用的浏览器对象,用于操作DOM和访问浏览器功能。但在uni-app的非Web环境中,这些对象可能不存在或其行为有所不同,因为它们不是基于传统的浏览器WebView。

代码案例分析

在H5环境中(标准的WebView)

在H5端,documentwindow对象是可用的,你可以像在传统Web开发中那样使用它们:

<template>
  <div @click="handleClick">Click me</div>
</template>

<script>
export default {
  methods: {
    handleClick() {
      console.log(document.title); // 访问document对象
      window.alert('Hello, uni-app!'); // 使用window对象
    }
  }
}
</script>

在非H5环境(如微信小程序)

在微信小程序等环境中,直接访问documentwindow对象会导致报错,因为这些环境不直接暴露这些对象。uni-app提供了自己的API来替代一些Web标准API的功能,例如使用uni对象来访问设备信息、文件系统、网络请求等。

例如,如果你需要在非H5环境中弹出一个提示框,应该使用uni-app提供的API:

methods: {
  showAlert() {
    uni.showToast({
      title: 'Hello, uni-app!',
      icon: 'none'
    });
  }
}

总结

在uni-app开发中,理解目标平台的环境差异非常重要。对于需要在多个平台运行的应用,应该尽量使用uni-app提供的跨平台API,避免直接使用documentwindow等特定于Web环境的对象。这样不仅可以避免跨平台兼容性问题,还能更好地利用uni-app框架提供的优化和功能。

回到顶部