小游戏开放数据域的postMessage缺少一个Callback机制
发布于 5 年前 作者 ycai 576 次浏览 来自 问答

我理解并且明白开放数据域的作用和设定,但希望可以提高一下即时性。

  • 需求的场景描述(希望解决的问题)

文档【展示关系链数据】章节

按文档所展示的例子,主域没有办法知道开放数据域什么时候读取完成好友分数数据并且已经绘制到sharedCanvas上。

这样的设定,恐怕只能在小游戏一启动后就要将好友的游戏分数数据读取好,并且将数据排好顺序渲染到sharedCanvas上,没有了即时性。

不然主域怎么知道开放数据域已经准备好了sharedCanvas的内容?毕竟没有开放数据域主动通知主域的这个机制。

  • 希望提供的能力

希望主域里调用开放数据域的postMessage方法的时候,能传一个回调也好,返回一个Promise也好,希望可以让主域知道开放数据域已经将sharedCanvas准备好了可以使用了。

这样也不会有敏感数据泄漏的问题吧?

// 主域

let openDataContext = wx.getOpenDataContext();


// 回调形式

openDataContext.postMessage('rankLink', ()=>{

});


// 或 Promise形式

openDataContext.postMessage('rankLink').then().catch();


4 回复

你好,这个需求我们此前已经经过深度讨论,得出有数据泄漏风险的结论,所以暂不考虑支持。

我也想要个回调,,因为我的工程需要画2个排行榜,然而公共画布只有一个,而且没有回调。。导致有时候第一个画布已经画完了还要等很久才能画第二个。

遇到同样的问题,暂时用比较笨的办法:定时器,逐个延时访问共享画布,获取绘制好的内容,体验确实不太好。

可以提供一个确定的消息(或信号),供开放数据域调用,主域接收。这样不会有消息泄露的风险。

//主域

openDataContext.postMessage(data, callback_A)

你们在开放数据域外拦截主域传进来的callback_A,微信内部提供一个新的callback_B给开放数据域调用,当callback_B被调用,就在开放数据域外调用开发者提供的callbackA

这样可以吧

回到顶部