www_inav_site
www_inav_site
  • 发布:2023-08-15 16:57
  • 更新:2024-11-06 10:26
  • 阅读:798

【报Bug】ios设备用webview打开本地hybrid/html 白屏

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 3.8.7

手机系统: iOS

手机系统版本号: iOS 10.0

手机厂商: 苹果

手机机型: 苹果X

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

进入页面白屏(下棋-人机对战页面),两个项目的代码已经放到附件

预期结果:

不白屏

实际结果:

白屏

bug描述:

项目环境Vue3版本,出问题页面为nvue,用了webview组件,web-view引入的页面为用uniapp的vue3版本开发的项目发行->网站pc的代码,

现在两种情况,webview的src指向本地跑起来的代码没问题,比如http://192.168.0.179:1120#?u=/pages/playingChess/playPage&p=参数

但是src改成/hybrid/html/index.html#?u=/pages/playingChess/playPage&p=参数就会白屏,

安卓设备两种情况都没问题,这是什么原因呢?

2023-08-15 16:57 负责人:无 分享
已邀请:
www_inav_site

www_inav_site (作者) - 时间就是金钱,而编程就是时间。

问题页面的代码

<template>  
  <view>  
    <web-view :style="{height:`${screenHeight}px`}" :webview-styles="webviewStyles" v-if="pageUrl" @onPostMessage="onPostMessage" @message="onPostMessage" :src="pageUrl" class="webView"></web-view>  
  </view>  
</template>  
<script setup>  
import { onLoad, onUnload, onBackPress } from '@dcloudio/uni-app'  
import { h5Url } from '@/config/baseURL'  
import useStoreFun from '@/stores/index.js';  
import { storeToRefs } from 'pinia'  
const { useChessboard } = useStoreFun()  
const { myBoard, myPieces, border, notation, tips, sound, regret, drawChess } = storeToRefs(useChessboard)  
const p = encodeURIComponent(JSON.stringify({ // 将要传入到h5的参数  
  myBoard: myBoard.value,  
  myPieces: myPieces.value,  
  border: border.value,  
  notation: notation.value,  
  tips: tips.value,  
  sound: sound.value,  
  regret: regret.value,  
  drawChess: drawChess.value  
}))  
// #ifdef H5  
onLoad(() => {  
  window.addEventListener("message", function(event) {  
    event.data.data && onPostMessage({detail:{data:[event.data.data.arg]}})  
  }, false);  
})  
onUnload(() => {  
  window.removeEventListener("message", function(e) {});  
})  
// #endif  
// 监听安卓返回键并阻止返回,ios禁用侧滑返回即可  
onBackPress(options => {  
  if (options.from === 'navigateBack') return false;   
  userBack();  
  return true;    
})  
function userBack() {  
}  
import { ref, reactive } from 'vue'  
const pageUrl = `${h5Url}#?u=/pages/playingChess/playPage&p=${p}&t=${uni.getStorageSync('token')}`  
const screenHeight = ref(uni.getSystemInfoSync().windowHeight)  
const webviewStyles = reactive({ progress: false })  
function onPostMessage(data) {  
  let obj = data.detail.data[0]  
  switch (obj.type) {  
    case 'setGame':   
      useChessboard.setSound(obj.data.sound)  
      useChessboard.setRegret(obj.data.regret)  
      useChessboard.setDrawChess(obj.data.drawChess)  
      break;  
    case 'audio':   
      sound.value && playAudio(obj.data)  
      break;  
  }  
}  
// 播放音频  
function playAudio(data) {  
  const audioContext = uni.createInnerAudioContext();  
  audioContext.src = `../../static/audio/${data}.mp3`;  
  audioContext.play()  
}  
</script>  

<style lang="scss" scoped>  
</style>  
www_inav_site

www_inav_site (作者) - 时间就是金钱,而编程就是时间。

顶顶顶顶

www_inav_site

www_inav_site (作者) - 时间就是金钱,而编程就是时间。

到底啥原因呀

DCloud_iOS_WZT

DCloud_iOS_WZT

https://uniapp.dcloud.net.cn/component/web-view.html#web-view 看下是不是本地缺文件 css js都全嚒 路径对不对

  • www_inav_site (作者)

    安卓上没任何问题的

    2023-08-16 11:41

  • www_inav_site (作者)

    没有缺文件,hbuilderx打包成h5后直接复制过来的

    2023-08-16 11:42

  • DCloud_iOS_WZT

    回复 8***@qq.com: 放到static下面试下

    2023-08-16 11:48

  • www_inav_site (作者)

    回复 DCloud_iOS_WZT: 不行 依旧安卓正常 ios白屏

    2023-08-16 13:27

  • www_inav_site (作者)

    回复 DCloud_iOS_WZT: 把html代码都删了换成一个初始的静态页面代码是可以正常显示的,但是我换成项目就不行

    2023-08-16 14:17

www_inav_site

www_inav_site (作者) - 时间就是金钱,而编程就是时间。

<body>  
    测试进入  
  </body>

我在html随便写一点内容,此时ios的webview组件的src换成/hybrid/html/index.html可以看到"测试进入",换成/hybrid/html/index.html#就没有这四个字了,/hybrid/html/index.html#?u=/pages/playingChess/playPage&p=${p}&t=${uni.getStorageSync('token')}更没有

www_inav_site

www_inav_site (作者) - 时间就是金钱,而编程就是时间。

为啥ios不能用hash呀

www_inav_site

www_inav_site (作者) - 时间就是金钱,而编程就是时间。

这个问题无解了吗? 目测问题就是src带#导致ios无法识别

www_inav_site

www_inav_site (作者) - 时间就是金钱,而编程就是时间。

救命呀~

enderX

enderX

20年就有的问题,到现在似乎依然没有解决

1***@qq.com

1***@qq.com

你好,解决了嘛?

HEDA

HEDA - 数字农业持续引领者

你好,请问解决了吗

要回复问题请先登录注册