WPF WebBrowser denetimini uygulayan bir uygulamam var. Uygulamamdan, muhtemelen diğer iş parçacıklarından çağrılması gereken bazı JS işlevlerini içeren bir sayfa yükler. Tercihen, MVVM modeline yapışmak ve modelde fonksiyon dönüşünü ayrıştırmak için kodu tutmak istiyorum. WebBrowser nesnesindeki InvokeScript yönteminin çağrılması, bir UI öğesi olduğundan, Dispatcher iş parçacığında (ve dolayısıyla görünümde) gerçekleşmelidir.Dağıtıcı olmadan WPF web tarayıcısında Javascript'i çağırın
Şu anda bu işi yapmak için izleyeceğiniz adımlar (kabaca pseudo) 'dir:
- subscribe to the LoadCompleted event of the browser (view)
- set the browser source (model -> viewmodel -> view)
- catch the LoadCompleted event (view -> viewmodel -> model)
- some logic (model)
- invoke script (model -> viewmodel -> view)
- get script result (view -> viewmodel -> model)
- some logic (model)
Bu (ViewModel aracılığıyla) modeli ve görünümü arasında oldukça uzun bir sırt ve ileri-iletişim sonuçlanır . WPF (veya bu konudaki MVVM) ile deneyimlediğimden beri, bu görevi yerine getirmenin daha iyi bir yolunun olup olmadığını merak ediyorum (ve neat: demek istediğim: model, viewmodel ve görünüm arasındaki daha az çağrı ve olay).
güzel öneri That. Ancak, CefSharp'ın Awasomium ya da WPF WebBrowser ile karşılaştırıldığında gerçek avantajları nedir? – Bart
Awesomium'un avantajı, CefSharp'ın açık kaynak kodlu ve ücretsiz olmasıdır. Awesomium için destek çok eksik. Büyük ve ciddi bir şirket olduklarına inanmanızı istiyorlar, ama gerçek şu ki - sadece bir adam. Kod açık olmadığından, hataları düzeltmek için geliştiricinin merhametine sahipsiniz. Ve proje ÇOK yavaş hareket ediyor. Sanırım hala krom 16 gibi bir şey kullanıyorlar. –
Yerel WPF WebBrowser kontrolü söz konusu olduğunda, bununla ilgili çok fazla deneyimim olmadığını itiraf ediyorum. Başından beri üçüncü taraf kontrollerinin yoluna gittik. Ama akla gelen bazı şeyler var. Örneğin, CefSharp'ın MVVM modeli ile çok fazla akılda tutulması gibi. Hemen hemen her şey bir Komut veya DependencyProperty. Ayrıca tarayıcı ile çok fazla etkileşim async/await patter üzerinden yapılır. Bu da yerel WPF kontrolü üzerinde olumlu bir şeydir. –