2017-08-16 9 views
5

Mam następujące ustawienia słuchacza w moim Unity sceny:Ograniczanie/kolizje wiadomości 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"]); 
     } 
    } 
}; 

I moim zdaniem internetowej mam tę funkcję dziennika:

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

Kiedy wykonać następujący kod, jedyne wyjście, który pokazuje w LogCat są próby 5 i 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) 

Co powoduje ten problem i jak można go naprawić?

Odpowiedz

0

Wygląda na to, że adres URL nie ma czasu na opublikowanie wiadomości do odbiorcy. Twoja natychmiastowa zmiana adresu, aby nie był wykonywany. Dodałeś limit czasu, który jest rozsądny, sugeruję utworzenie funkcji, która czeka po każdym dzienniku.

Here to kolejny post mający podobny problem, który wymaga limitu czasu.

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

Nie testowałem tego, ale jeśli nie chcesz używać czasomierza z 500 milisekund prawdopodobnie można sprawdzić, czy strona została zakończona załadunek przed wykonaniem następnego żądania

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