2017-02-06 6 views
0

내 요구 사항은 WinForm 앱의 웹 브라우저 컨트롤에서 HTML5/AngularJS 폼을로드하고 둘 사이에서 데이터를 교환하는 것입니다.WinForm App에서 WebBrowser 컨트롤의 AngularJS 함수를 호출하려면 OK라고 언급 한 접근 방식입니다.

.Net 폼에서 WebBrowser 컨트롤 HTML/Angular 폼으로 데이터를 전달하려면 HTML 페이지의 간단한 JavaScript 메서드를 호출하고 해당 메서드가 Angular 복잡한 워크 플로를 트리거 할 것이라고 생각했습니다.

내 winform에서 JavaScript 함수를 호출하는 방법입니다.

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

당신은이 방법이 큰 applciation에 대한 좋은 또는 AngularJS와 양식을 웹 브라우저에 그물을 winform에서 데이터를 전달하는 더 좋은 방법이 있는지 제안 수 없습니다.

언젠가 다시 Typescript 함수를 호출하는 질문을 게시하고 대답을 얻었다. 그러나 그것은 복잡한 각도 응용 프로그램에는 적합하지 않은 웹 브라우저 컨트롤에서 Angular 클래스를 초기화하는 것이 었습니다.

따라서이 접근법은 Angular 페이지의 간단한 JS 함수를 호출하여 복잡한 각도 흐름을 유발합니다. 당신의 도움에 미리

Call TypeScript function from C# webbrowser control

감사합니다.

감사합니다, 당신에게 단방향 통신을 얻을하고 완전히 괜찮 것이다 마노

+0

이 요구 사항에 대한 제안 사항은 무엇입니까? – ManojP

답변

1

. 양방향 통신의 경우 ObjectForScripting을 살펴보십시오. 그와

, 당신은 여기에 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>"; 

편집 : 업데이트 답은 페이지에서 스크립트를 실행하는 다른 방법을 표시합니다.

 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); 

      }  

메모리 누수에주의하십시오. 웹 브라우저 컨트롤은 Internet Explorer와 동일한 렌더링 및 JavaScript 엔진을 가지고 있지만 IE와는 달리 메모리 누수시 탭 프로세스를 다시 시작할 수 없습니다. 그것은 당신의 공정 공간에서 산다. Angular JS와 IE는 역사적으로 잘 조화되지 않았으므로주의해야한다고 말하고 있습니다. 스코프를 올바르게 처리해야합니다.

+0

감사합니다 1) webbrowser 제어 양식 (AngularJS/HTML) winform에 관해서는 다른 옵션을 사용할 수 있습니다 또는 제가 언급 한 유일한 옵션입니다. 또한, WinForm에서 호출 할 간단한 Javascript 함수에서 각도 흐름을 트리거하는 방법을 알고 있습니까? 2) 예, HTML 양식을 WinForm 통신으로 Windows.external로 구현할 수 있습니다. 3) 메모리 누수에 관해서는, 당신은 내가 할 때 웹 브라우저 컨트롤을 버리는 것 외에 다른 것들을 돌봐야한다는 것에 대한 더 자세한 정보가 있습니다. Angular 측에서해야 할 일이 무엇인지 확신 할 수 없습니다. – ManojP

+0

InvokeScript가 가장 깨끗한 방법입니다. 다른 방법으로는 문서를 동적으로 편집하고 스크립트 태그를 추가해야합니다. 나는 그것을하는 방법을 보여주기 위해 나의 대답을 편집 할 것이다. –

+0

어떻게 그 일을하는지 내 대답을 편집했습니다.이 코드를 사용하여 새 스크립트 코드를 추가 할 수도 있지만,이 코드를 사용하여 기존 코드를 호출 할 수도 있습니다. –