2017-02-10 1 views
0

WebBrowser 사용자 정의 컨트롤이 포함 된 winforms 응용 프로그램을 만드는 중입니다. WebBrowser 컨트롤은 사용자 인증 세부 정보를 요청하는 웹 응용 프로그램의 페이지로 이동합니다. 사용자 이름과 암호가 입력되고 양식이 제출되면 웹 응용 프로그램은 요청을 보내고 인증에 성공하면 applicationValues ​​객체에 변수를 채 웁니다.WinForms 응용 프로그램의 WebBrowser 컨트롤에서 웹 응용 프로그램의 개체 읽기

applicationValues ​​개체가 인스턴스화 될 때 WebBrowser 컨트롤에서 웹 응용 프로그램의 개체를 Winforms 응용 프로그램으로 다시 읽고 WebBrowser 컨트롤이 포함 된 폼을 닫습니다.

현재, applicationValues ​​개체가 Winforms 응용 프로그램에 다시 전달되어야하는 부분까지 작업 (이 개체는 웹 응용 프로그램에서 성공적으로 만들어집니다)입니다. 나는 거기에 붙어있다.

이 컨트롤로이 작업을 수행 할 수 있습니까? 그렇지 않다면 고려해야 할 다른 접근법이나 해결 방법이 있습니까?

답변

1

이 작업을 수행 할 수 있지만 작업이 필요합니다. 우선, 웹 브라우저 컨트롤과 그 안에있는 페이지간에 데이터를주고받는 가장 쉬운 방법은 window.external 및 invoke 스크립트를 사용하는 것입니다. 물론 사용자 정의 컨트롤에 objectforscripting 속성을 설정해야합니다.

일단 완료하면 원시 유형을 통해 javacript에서 .net으로 데이터를 2 가지 방식으로 자유롭게 보낼 수 있습니다. 이제 구체적으로 개체를 JSON 문자열로 serialize 한 다음 window.external을 통해 보내고 .NET 쪽의 상대 개체로 deserialize하는 것이 좋습니다. System.Web.Script.Serialization의 JavaScriptSerializer을 사용할 수도 있습니다. 물론 JSON.net을 deserialize까지 사용할 수도 있습니다. 여기

MSDN

private void Form1_Load(object sender, EventArgs e) 
{ 

    webBrowser1.ObjectForScripting = this; 

    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>"; 
} 

public void Test(String message) 
{ 
    MessageBox.Show(message, "client code"); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    webBrowser1.Document.InvokeScript("test", 
     new String[] { "called from client code" }); 
} 
에서 가져온 기본적인 생각이다