UniWebView消息限制/冲突?

我在Unity场景中设置了以下监听器:

ui.OnMessageReceived += (view, message) => { var path = message.Path; var action = message.Args ["action"]; if (path == "app") { if (action == "log") { Debug.Log ("[W] " + message.Args ["text"]); } } }; 

在我的Web视图中,我有这个日志function:

 log: function(m) { window.location.href = 'uniwebview://app?action=log&text=' + m; } 

当我执行以下代码时,logcat中显示的唯一输出是测试5和E:

 app.log("Echo Test (1)"); app.log("Echo Test (2)"); app.log("Echo Test (3)"); app.log("Echo Test (4)"); app.log("Echo Test (5)"); setTimeout(function() { app.log("Echo Test (A)"); app.log("Echo Test (B)"); app.log("Echo Test (C)"); app.log("Echo Test (D)"); app.log("Echo Test (E)"); }, 500); 
 08-16 13:55:20.229 13860 13881 I Unity : [W] Echo Test (5) 08-16 13:55:20.693 13860 13881 I Unity : [W] Echo Test (E) 

造成这种情况的原因是什么以及如何解决?

看起来URL没有时间发布给您的侦听器。 您立即更改地址,因此它不会执行。 你添加了超时这是一个明智的事情,我建议你创建一个等待每个日志后的函数。

这是另一篇有类似问题需要暂停的post。

 log: function(m) { setTimeout(function(){ window.location.href = 'uniwebview://app?action=log&text=' + m; },500 } 

我没有对此进行过测试,但如果您不想使用500毫秒的计时器,您可能会在执行下一个请求之前检查页面是否已完成加载

 var readyStateCheckInterval = setInterval(function() { if (document.readyState === "complete") { clearInterval(readyStateCheckInterval); init(); } }, 10);