Es ist ein Memo, also ist es verschieden.
--Xamarin.Forms + WebView (HTML, JavaScript SPA) Gawa native App
Aktion <TaskCompletionSource <bool >> OnRequestIsEnableBackKey {get; set;}
[Formularseite] Erweitern Sie in WebViewEx (erweiterte Version von WebView) auch Task <bool> IsEnableBackKeyAsync ()
. Die Implementierung ist wie folgt.
public Task<bool> IsEnableBackKeyAsync()
{
var comp = new TaskCompletionSource<bool>();
if (OnRequestIsEnableBackKey != null)
{
OnRequestIsEnableBackKey.Invoke(comp);
}
else
{
comp.SetResult(false);
}
return comp.Task;
}
Vier. Erstellen Sie einen JavaScriptHandler unter Verknüpfen von JavaScript mit WebView von Xamarin.Forms (mit iOS / Android) - Qiita. Übergeben Sie zusätzlich zu Control im Konstruktor "e.NewElement as WebViewEx". Der Name des Arguments lautet "WebViewEx Outer". Das zweite Argument von AddJavascriptInterface sollte "GawaApp" sein.
Fünf. Schreiben Sie den Code zum Empfangen von OnRequestIsEnableBackKey in den Konstruktor von JavaScriptHandler.
private TaskCompletionSource<bool> isEnableBackKeyComp = null;
public JavaScriptHandler(Android.Webkit.WebView webView, WebViewEx outer)
{
outer.OnRequestIsEnableBackKey = comp =>
{
isEnableBackKeyComp = comp;
//Fehler, wenn nicht vom Hauptthread aufgerufen
webView.Post(() =>
{
webView.EvaluateJavascript("window.requestIsEnableBackKey()", null);
// webView.LoadUrl("javascript:window.requestIsEnableBackKey();");← Das ist noch OK
});
};
}
Wenn bisher webViewEx.IsEnableBackKeyAsync () auf der Formularseite aufgerufen wird, wird die JavaScript-Funktion window.requestIsEnableBackKey () aufgerufen.
[Export]
[Android.Webkit.JavascriptInterface]
public void onResultIsEnableBackKey(bool value)
{
isEnableBackKeyComp?.SetResult(value);
isEnableBackKeyComp = null; // one shot
}
Das Aufrufen von GawaApp.onResultIsEnableBackKey (true oder false)
auf der JavaScript-Seite ruft diese Methode zurück.
Wenn Sie einen Wert auf isEnableBackKeyComp setzen, bei dem es sich um eine TaskCompletionSource handelt, wird das Ergebnis von wait webViewEx.IsEnableBackKeyAsync ()
auf der Forms-Seite zurückgegeben.
window.requestIsEnableBackKey = () => {
//Etwas verarbeiten
GawaApp.onResultIsEnableBackKey(true or false);
}
Ich habe es zur Hälfte implementiert, aber ich habe es beendet, weil es problematisch war (ich dachte, dass unidirektional von JavaScript zu C # einfacher ist), also werde ich nur die Idee belassen.
Recommended Posts