html5 view的层级,cocos creator - WebView内部页面的交互和层级问题

我们知道creator里的WebView,VideoPlayer等特殊组件有一个非常严重的问题,就是不管你怎么设置层级,这类组件始终处于最上层!其他UI组件会被遮挡。

我们打开浏览器运行,F12检测元素就可以清楚的看到他们的层级关系。

如下图:

FucdozGYloj5cJDeLwSSfTpaFdBr

通过上图我们可以清楚的看到,video(videoPlayer组件) 和 iframe(webView组件) 在 canvas(GameCanvas) 上层,而我们creator内置UI组件都是在GameCanvas层渲染的,所以不管我们怎么改UI层级都无效。

其实除了上述的办法,还有一个解决方案,就是我们可以通过自己写一个简单的html页面来中转!

大致思路:

首先我们自己用nginx搭建一个简单的html页面,在通过webView组件加载我们自己的web页面,然后在我们自己的页面加载一些需要的video或者其他网页,一些需要显示在Video组件上层的组件我们就可以通过html标签来实现了(需要一点web知识),然后和creator JS交互就可以了。

如何与 WebView 内部页面进行交互呢?:

可以参考一下

官方文档

个人感觉官方文档讲得不够全面。

我的实现如下:

首先我们先来看下官方的:

Ft5uEIN8mUYwoGPyRGZJ92sMTZJK

我们可以看到,Web平台上会出现跨域的问题,所以我们需要分别对web平台和移动平台做处理,

web平台:

在Web上我们可以通过window.postMessage 实现跨域消息传递:

cocos 发送消息到 web:

cocos JS:

this.webView._sgNode._renderCmd._iframe.contentWindow.postMessage(data, "*");

//如果因为版本原因 _sgNode 被舍弃了,可以换成以下

this.webView._impl._iframe.contentWindow.postMessage(data, "*");

这里需要注意的是:我们必须等webView加载完成之后才能发送。

html JS:

//接收来自cocos的消息

window.addEventListener('message', function (e) {

var data = e.data;//参数

console.log("-----------message--------------", data)

});

web 发送消息到 cocos:

html JS:

//browser 浏览器下,向cocos发送消息

parent.postMessage("------------hello!-----cocos---------", "*")

cocos JS:

if (cc.sys.isBrowser) {

//这里是浏览器环境下, 接收web传过来的消息

window.addEventListener('

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值