2017-10-14 4 views
0

WebBrowser 컨트롤을 사용하여 ASP.Net MVC 응용 프로그램을 호스팅하는 WPF usercontrol이 있습니다.웹 브라우저 컨트롤에서 WPF 응용 프로그램을 호스팅하는 이벤트 트리거

WebApplication에서 특정 작업이 수행 될 때 usercontrol에 알리고 싶습니다. 이것을 수행 할 수있는 방법은 무엇입니까?

+0

ASP.NET 응용 프로그램을 수정할 수 있습니까? 그렇다면 브라우저 컨트롤의'ObjectForScripting' 속성을 자바 스크립트에서'window.external'를 통해 사이트에서 호출 할 수있는 클래스의 인스턴스로 설정할 수 있습니다. –

답변

1

@Szabolcs Dézsi가 웹 응용 프로그램에 액세스 할 수 있다면 주석에 언급 한대로 WebBrowser.ObjectForScripting을 개체의 인스턴스에 사용하고 javascript에서 해당 메서드를 호출 할 수 있습니다. 우리가 WebBrowser 컨트롤에 표시이 간단한 HTML 페이지를

webBrowser.ObjectForScripting = new Demo(); 

과 말 :

[ComVisible(true)] // Class must be ComVisible 
public class Demo 
{ 
    public void SayHello(string name) => MessageBox.Show($"Hello {name} !!!"); 
} 

이 클래스의 인스턴스를 만듭니다 WebBrowser 컨트롤의 ObjectForScripting 속성에 할당 : 다음은 간단한 데모입니다 :

<html> 
<head> 
    <title></title> 
    <script> 
     function sayhello() 
     { 
      var name = document.getElementById('name').value; 
      // the window.external is assigned an instance of 
      // class we created above. 
      // We can call C# instance method SayHello directly. 
      window.external.SayHello(name); 
     } 
    </script> 
</head> 
<body> 
    <form action="#" method="post"> 
     <input id="name" type="text" name="name" value="" /> 
     <input type="submit" name="submit" value="Say Hello" onclick="sayhello()" /> 
    </form> 
</body> 
</html> 

이제 이름을 입력하고 SayHello 버튼을 클릭하면 예상대로 MessageBox가 표시됩니다.

또한 당신은 마이크로 소프트 HTML 개체 라이브러리 (MSHTML) 컴 도서관에 살고 HtmlDocument의 인스턴스, 프로젝트에 참조해야합니다 재산 WebBrowser.Document 있습니다.

Document 속성을 사용하면 현재 페이지의 DOM 개체를 쿼리 할 수 ​​있으며 HtmlDocument.getElementById() 등의 클래스와 HtmlDocument 클래스가 노출 된 메서드를 통해 javascript와 같은 HTML 페이지를 조작 할 수 있습니다. 이것은 당신이 WebBrowser 제어로드 페이지를 조작하기 위해 제공하는 힘을 이해하는 데 도움

webBrowser.LoadCompleted += new LoadCompletedEventHandler((o, e) => 
{ 
    if (webBrowser.Document is HTMLDocument DOM) 
    { 
     var namefield = DOM.getElementById("name"); 
     namefield.setAttribute("value", "Enter your name!!!"); 
    } 
}); 

희망 :이 코드는 페이지 후 HTML 페이지 위의 이름을 입력 값 특성을 수정 예를 들어

는 WebBrowser 컨트롤에 의해로드됩니다 .

+1

아주 좋은 설명입니다. 같은 시도와 매력처럼 작동합니다! 고맙습니다! – user2143645