Zahteve: Prejšnji članek je opisoval, kako implementirati spletni vmesnik in aplikacijo WinForm za medsebojno komunikacijo za pošiljanje sporočil, vendar je bilo uspešno poslano le sporočilo, informacije o odzivu pa niso bile pridobljene. Kaj pa, če C# odjemalec pokliče funkcijsko metodo spleta, da dobi povratni rezultat? In kako splet kliče C# kodo in dobi povratno vrednost?
Pregled:
Najprej si poglejmo upodobitve implementacije, spletna stran imenuje aplikacijo WinFormPridobi podatke s odložišča, aplikacija WinFormPokličite metodo abc spleta, da dobite donosno vrednostKot sledi:
C# kliče metodo spletne funkcije
Ta scenarij prikazuje, kako zagnati JavaScript na spletu. Pri tej metodi gostiteljska aplikacija določi JavaScript kodo za zagon in kodo posreduje spletu s pomočjo ExecuteScriptAsync. Funkcija ExecuteScriptAsync vrne rezultat JavaScripta klicatelju ExecuteScript.
Koda strani Angular index.html je naslednja:
Frontend predvsem definira funkcijo abc.
Winform pokliče funkcijo abc spleta z naslednjo kodo:
Spletna stran kliče metodo funkcije v C#
Prenos izvornih predmetov na splet. Metoda klica objekta iz spleta se nato imenuje.
Za uporabo sporočila, ki predstavlja klic metode, uporabite API AddHostObjectToScript. Na splošni ravni ta API omogoča, da so izvorni (gostiteljski) objekti izpostavljeni spletu in delujejo kot proxyji. Uporabi windows.chrome.webview.hostObjects. {name}>a0> dostopaj do teh objektov. Referenčna dokumentacija:Prijava do hiperpovezave je vidna.
Ustvari nov gumb na spletni strani, klikni gumb za klic C# kode in pridobiš podatke trenutne tabele sistema.
Koda Angular app.component.html je naslednja:
app.component.ts koda je naslednja:
Sprednja JS koda vsebuje sinhrone in asinhrone klice.
c# definira WebView2HostObject gostiteljski objekt z naslednjo kodo:
Opomba: Prilagojeni razredi WebView2HostObject morajo biti označeni[ClassInterface(ClassInterfaceType.AutoDual)]、[ComVisible(true)]lastnosti, sicer JS ne bi mogel dostopati do razreda.
Nato dodajte novo definirano instanco preko AddHostObjectToScript(String,Object) z naslednjo kodo:
Na koncu kliknite gumb na sprednjem koncu za pridobitev podatkov iz odložišča, učinek je naslednji:
(Konec)
|