WPF WebBrowserコントロールを実装するアプリケーションがあります。おそらく他のスレッドからアプリケーションから呼び出さなければならないいくつかのJS関数を含むページを読み込みます。私はMVVMのパターンに固執し、モデル内で関数の戻り値を解析するコードを保持しておきたいと思います。 WebBrowserオブジェクトでInvokeScriptメソッドを呼び出すことは、UI要素であるため、Dispatcherスレッド(したがってビュー)で実行する必要があります。ディスパッチャなしのWPF WebブラウザでJavascriptを呼び出す
私は現在、この仕事を得るための手順は、(大体擬似中)である:
- 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)
これは、(のviewmodel経由)モデルとビューの間でかなりの前後コミュニケーションにつながります。私はWPF(またはその点ではMVVM)で経験したことがないので、私はこの仕事をよりうまくやり遂げる方法があるのかどうか疑問に思っています(ちなみに、モデルとビューモデルとビューの間の呼び出しやイベントが少ない)。
素敵な提案ということ。ただし、AwasomiumまたはWPF WebBrowserのいずれかと比較して、CefSharpの実際の利点は何ですか? – Bart
Awesomiumの利点は、CefSharpがオープンソースで無料であることです。 Awesomiumのサポートは非常に欠けています。彼らはあなたが彼らが大きくて真面目な会社だと信じて欲しいですが、真実はただの人です。コードが公開されていないので、バグを修正するために開発者が手を差し伸べています。プロジェクトは非常にゆっくりと動きます。私は彼らがまだクロム16のようなものを使っていると信じています。 –
ネイティブのWPF Webブラウザコントロールに関しては、私はそれに多くの経験がないことを認めます。私たちはちょっと、最初から第三者コントロールの道を歩いていました。 しかし、いくつかのことが考えられます。たとえば、CefSharpがMVVMパターンを念頭に置いて構築されているという事実のように。ほとんどすべてがコマンドまたは依存プロパティです。 さらに、ブラウザとのやりとりは、async/awaitで完了します。これはネイティブのWPFコントロールよりもポジティブです。 –