Xilium.CefGlue, wie JavaScript-Code ausführen mit Rückgabewert?
Ich bin ganz neu in der Programmierung, multi-threading, und ich konnte nicht verstehen, aus dem xelium Beispiel, wie ich ausführen könnte ein javascript und die Rückkehr Wert.
Ich habe getestet:
browser.GetMainFrame().ExecuteJavaScript("SetContent('my Text.')", null, 0);
javascript ausgeführt wird, aber ich diese Funktion nicht erlauben, mich um die Rückkehr Wert.
Ich sollte führen Sie die folgende Funktion, um alle den text, den der Benutzer geschrieben haben in der box..
browser.GetMainFrame().ExecuteJavaScript("getContent('')", null, 0);
die Funktion TryEval
sollte dies tun...
browser.GetMainFrame().V8Context.TryEval("GetDirtyFlag", out returninformation , out exx);
Aber diese Funktion nicht aufgerufen werden kann, aus dem browser, ich denke, es muss aufgerufen werden, aus dem renderer? Wie kann ich das tun?
Konnte ich nicht verstehen, die Erklärungen über CefRenderProcessHandler
und OnProcessMessageReceived
.. so registrieren Sie ein Skriptfähiges Objekt und mein javascript & Parameter?
Thx für die Anregungen wie ich Sie lösen könnte!
InformationsquelleAutor Roland | 2013-08-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Check out this post: https://groups.google.com/forum/#!Thema/cefglue/CziVAo8Ojg4
InformationsquelleAutor user3228137
Ich habe zu kämpfen mit diesem als gut. Ich glaube nicht, dass es einen Weg dies zu tun ist synchron...oder einfach 🙂
Vielleicht das, was getan werden kann, ist dies:
Prozess. Sie können alle Arten von Parameter dieses Aufrufs in einer strukturierten Art und Weise, so fasst man die JS-Methode-name und Parameter um, sollte es nicht schwierig sein zu tun.
In der renderer-Prozess (RenderProcessHandler onProcessMessageReceived Methode) tun TryEval auf die V8Context und erhalten Sie die return-Wert per Parameter und sendProcessMessage zurück zu den
browser-Prozess mit den JS-Wert zurückgeben (Beachten Sie, dass dieses unterstützt die normale Rückkehr Semantik von Ihrem JS-Methode).Sie erhalten die browser-Instanz-Referenz in der onProcessMessageReceived so es ist so einfach, wie diese (gemischte pseudo-code)
browser.GetMainFrame().CefV8Context.tryEval(js-code,aus retValue, aus der Ausnahme);
Prozess retValue;
browser.sendProcessMessage(...);
Browser erhalten Sie einen Rückruf in den WebClient in onProcessMessageReceived.
Es ist nichts besonderes hier in Bezug auf die Einrichtung JS. Ich habe zum Beispiel eine geladene html-Seite eine js-Funktion in es. Es dauert ein Parameter als Eingabe und gibt einen string zurück. im js-code-parameter auf TryEval ich einfach diesen Wert:
Es ist etwas verworren, aber das scheint wie eine nette praktikabler Ansatz - besser, als das zu tun ExecuteJavaScript und Veröffentlichung der Ergebnisse via XHR auf benutzerdefinierte handler in meinen Augen.
Ich versuchte dies und es funktioniert in der Tat Recht gut....und ist nicht schlimm, wie es alle nicht-blockierende. Die Verdrahtung in der browser-Prozess getan werden muss, um die Antwort zu verarbeiten richtig.
Verlängert werden kann und in eine Reihe von Klassen zu abstrahieren, das für alle Arten von anrufen..
Werfen Sie einen Blick auf die Xilium demo-app. Die meisten der notwendigen Verkabelung ist es bereits für onProcessMessage - ein Globale Suche. Suchen
Cheers.
Phil hi - ich glaube nicht, dass es in einer bestimmten sequenziellen Reihenfolge...es einfach highlights 3 Gebieten, wo Sie berühren konnte den code, damit es funktioniert.
InformationsquelleAutor Moonwalker
Ich dieses problem gelöst, durch Rücksendung der Ergebnis-Wert aus meiner JavaScript-Funktion zurück zu Xilium host-Anwendung über einen ajax-Aufruf ein eigenes Schema handler. Nach Xilium Autor fddima es ist der einfachste Weg, dies zu tun IPC.
Finden Sie ein Beispiel zum implementieren einer scheme-handler in die Xilium demo-app.
InformationsquelleAutor Stanislav