2017-02-06 17 views
0

私の要件は、WinFormアプリケーションのWebブラウザコントロールにHTML5/AngularJSフォームをロードし、両者の間でデータを交換することです。私はWinForm AppからWebBrowserコントロールのAngularJS関数を呼び出すにはOKと言いました

.NetフォームからWebBrowserコントロールのHTML/Angularフォームにデータを渡すには、HTMLページの単純なJavaScriptメソッドを呼び出して、そのメソッドがAngular複雑なワークフローをトリガーすると考えました。

これは私のwinformからJavaScript関数を呼び出す方法です。

WebBrowserControl1.InvokeScript("FunctionName", new object[] {"param"}); 

あなたは、このアプローチは、大規模なapplciationのために良いですかWebBrowserコントロールAngularJSフォームに.NET Winフォームからのデータを渡すためのより良い方法があるかどうかを示唆でした。

私はTypescript関数を呼び出すために質問を投稿しましたが、私も答えを得ました。しかし、これは、複雑なAngularアプリケーションでは実現不可能なWebブラウザコントロールからAngularのクラスを初期化することでした。

私はこのアプローチをAngularページの単純なJS関数と呼び、複雑な角度の流れを引き起こすと考えています。あなたの助けを事前に

Call TypeScript function from C# webbrowser control

感謝。

おかげで、あなたの片方向通信を取得し、それは完全に罰金ですます Manojさん

+0

この要件の提案はありますか? – ManojP

答えて

1

。双方向通信の場合は、ObjectForScriptingをご覧ください。それと

、お使いのブラウザではJavaScriptが直接、MSDNから露骨なペーストである。ここwindow.external

を経由して戻ってデータを送信するためにC#のメソッドを呼び出すことができます。

webBrowser1.AllowWebBrowserDrop = false; 
    webBrowser1.IsWebBrowserContextMenuEnabled = false; 
    webBrowser1.WebBrowserShortcutsEnabled = false; 
    webBrowser1.ObjectForScripting = this; 
    // Uncomment the following line when you are finished debugging. 
    //webBrowser1.ScriptErrorsSuppressed = true; 

    webBrowser1.DocumentText = 
     "<html><head><script>" + 
     "function test(message) { alert(message); }" + 
     "</script></head><body><button " + 
     "onclick=\"window.external.Test('called from script code')\">" + 
     "call client code from script code</button>" + 
     "</body></html>"; 

EDIT:は、ページ上でスクリプトを実行する他の方法を示すために、答えを更新。

 private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
      { 
       WebBrowser wb = sender as WebBrowser; 

       HtmlElement he = webBrowser1.Document.CreateElement("script"); 
       he.InnerHtml = "alert('popup');"; 
       wb.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterEnd, he); 

      }  

メモ:メモリリークに注意してください。 WebブラウザコントロールはInternet Explorerと同じレンダリングとJavaScriptエンジンを備えていますが、IEとは異なり、メモリがリークするとタブプロセスを再開できません。あなたのプロセス空間に生きています。私はAngular JSとIEが歴史的にうまく一緒に遊んでいないので注意が必要です。スコープを正しく処理するようにしてください。

+0

ありがとう1)Webブラウザコントロールフォーム(AngularJS/HTML)へのwinformに関しては、他にも利用可能なオプションがありますか、私が言及したものは唯一のオプションです。また、私はWinFormから呼び出している単純なJavascript関数からAngular flowをどのようにトリガすることができますか? 2)はい、HTMLフォームからWinForm通信へWindows.externalで実装できます。 3)メモリリークに関して、あなたが私が終わったときにウェブブラウザコントロールを破棄する以外に気をつけなければならない事柄についてもっと詳しく知っている。私はAngular側で何かする必要があるとは確信していません。 – ManojP

+0

InvokeScriptは最もクリーンな方法です。もう1つの方法は、ドキュメントの動的編集とスクリプトタグの追加を開始することです。私はそれを行う方法を示すために私の答えを編集します。 –

+0

これを行う方法を示すために私の答えを編集しました。それを使って新しいスクリプトコードを追加することもできますが、これを使って既存のコードを呼び出すこともできます。 –

関連する問題