Dev*_*ate 6 javascript c# 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"]);
}
}
};
Run Code Online (Sandbox Code Playgroud)
在我的Web视图中,我有这个日志功能:
log: function(m) {
window.location.href = 'uniwebview://app?action=log&text=' + m;
}
Run Code Online (Sandbox Code Playgroud)
当我执行以下代码时,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);
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)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 似乎没有时间发布到您的侦听器。您立即更改地址,因此它不会执行。您添加了超时,这是明智的做法,我建议您创建一个在每个日志之后等待的函数。
这是另一篇有类似问题的帖子,需要暂停。
log: function(m) {
setTimeout(function(){
window.location.href = 'uniwebview://app?action=log&text=' + m;
},500
}
Run Code Online (Sandbox Code Playgroud)
我还没有对此进行测试,但如果您不想使用 500 毫秒的计时器,您可以在执行下一个请求之前检查页面是否已完成加载
var readyStateCheckInterval = setInterval(function() {
if (document.readyState === "complete") {
clearInterval(readyStateCheckInterval);
init();
}
}, 10);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |