WKWebView: versucht, Javascript synchron vom Haupt-Thread abzufragen

8

Gibt es eine Möglichkeit, das Javascript synchron vom Hauptthread abzufragen?

Javascript wird aus dem systemeigenen Code mit einer asynchronen Funktion mit einem Callback-Parameter abgefragt, um die Antwort zu behandeln:

%Vor%

Asynchrones Verhalten kann normalerweise synchron gemacht werden, indem der Thread & amp; Steuerung der Ausführung mit einem Semaphor:

%Vor%

... aber in diesem Fall, weil der completionHandler immer im Hauptthread aufgerufen wird, die Code Deadlocks, weil der completionHandler Block niemals ausgeführt wird (Hauptthread wurde von der .pause angehalten) dispatch_semaphore_wait in der letzten Zeile)

Irgendwelche Vorschläge?

BEARBEITEN

Ich möchte den Hauptthread lieber nicht blockieren, um diesen Code auszuführen. Aber ich kann nicht vom Hauptthread entkoppeln, ohne meine APIs von synchron zu asynchron zu ändern, mit einem Domino-Effekt den ganzen Stapel hinauf (z. B. von let ua = computeUserAgent() bis computeUserAgent() {(ua: String)->Void in /*Use ua value here */} ). Also muss ich zwischen zwei Ansätzen wählen, die beide Nachteile haben, und ich würde eher den Ansatz wählen, der meine internen APIs nicht durcheinander bringt, besonders für eine Aufgabe, die so trivial ist wie das Nachschlagen des Benutzeragenten.

    
Hugo 07.02.2015, 22:26
quelle

1 Antwort

2

Wenn Sie dies tun müssen ...

Wie in einem Kommentar zu dieser Antwort vorgeschlagen, könntest du eine enge Schleife um deinen Semaphor herum laufen lassen. Warte so.

%Vor%     
Tristan Burnside 08.02.2015, 03:57
quelle