2017-08-16 31 views
5

我有以下的聽衆建立在我的團結場景:UniWebView消息調節/衝突?

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視圖我有這樣的日誌功能:

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) 

這是什麼原因造成的?怎麼修復?

回答

0

看起來URL沒有時間發佈給您的聽衆。您立即更改地址,以免執行。您添加了超時這是一個明智的做法,我建議您創建一個在每個日誌之後等待的函數。

Here是另一個有類似問題需要暫停的帖子。

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);