2011-12-09 4 views
1

私は含むWindowsフォームアプリケーションからWebBrowserコントロールにデータをプッシュすることができます任意のメカニズムがあります。具体的にWebBrowserコントロールには、いくつかのknockout.jsが含まれていると私は、ローカルファイルシステム内の特定のファイルへの変更など、いくつかの外部イベントにノックアウトのViewModelを更新できるようにしたいです。どのように私は、WindowsフォームアプリケーションとWebBrowserコントロールの間で通信することができ

現時点では、私はJSフォームを使用してファッションの後に作業をしていますが、WebブラウザでJSを呼び出すと、マイクロウェブサーバーに長いポーリングjsonpリクエストが発行されます.Windowsフォームアプリケーションで実行しました。ページ自体はjsonpのサーバーなので、マイクロウェブサーバーは基本的にhttpListnerです)。フォームアプリケーションがファイル変更イベントを受け取ると、マイクロウェブサーバーを介して応答を返し、ノックアウトビューモデルを更新します。

問題は、このすべてが壊れやすい感じです - ファイルイベントが厚い来ると高速彼らはスキップされ始めることができるかどうか - 私のマイクロWebサーバが同じストリームに複数の結果を返すようにしようとしているように見えます。私はそれを修正することができますが、全体的に見て不快で壊れやすい。あなたが作成することができ、私はwebbrowsercontrolでWebページの実行中に含むアプリケーション信号何か(すなわち、いくつかのJSONを渡す)を持っているすべての非常に簡単な方法をしないのです(ページの更新なし!)

答えて

1

質問です要素は、あなたも、AKを作成することができ

var myJson = "{test : 1}"; 
this.browser.Document.Body.GetElementById("external-json").innerText = myJson; 

.. idを持つdiv要素が

<div id='external-json' data-bind='jsonHandler : {}' style='display:none'></div> 

は、その後、あなたのWinFormsアプリの中から、このdiv要素にJSONを書き言いますnockoutこの本

ko.bindingHandlers.jsonHandler = { 
     update: function(element, valueAccessor) { 
     //do something with the json 
     var json = element.innerText; 
     var obj = eval(json); //hmm 
     alert(obj.test); 
    } 
}; 

に反応するカスタムバインディングは明らかに単純な例であり、あなたは、おそらく多くは、あなたはおそらくあなたのクライアントスクリプト内の関数を呼び出す代わりに使用して、メッセージのキューを必要とするかもしれないという考えを向上させることができ素子。

+0

これは素晴らしいです。大好きです。これはすべて可能だったのか分からなかった!それは簡単にGoogleは私にこのhttp://notions.okuda.ca/2009/06/11/calling-javascript-in-a-webbrowser-control-from-c/他の人に有用である可能性が – Andiih

+1

Iを発見したさを知りますあなたはそれをすることができると思ったが、私は見るのが面倒すぎた。はるかに確かなアプローチ:) –

関連する問題