6

我的 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"]);
        }
    }   
};

在我的网络视图中,我有这个日志功能:

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)

是什么原因造成的,如何解决?

4

1 回答 1

0

看起来 URL 没有时间发布给您的听众。您立即更改地址,使其不执行。您添加了超时,这是一件明智的事情,我建议您创建一个在每个日志之后等待的函数。

是另一个需要超时的类似问题的帖子。

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);
于 2017-11-16T20:40:47.160 回答