별거 아닌데, 개념이 없으면 ( 나처럼 ) 헷갈릴 수 있어서 기록한다.
1. 너님이 귀차니즘 여러가지 까닭으로 웹뷰를 사용한다고 치자.
2. 그렇다면, 뒷단인 C#에서 동적으로 html 을 조립한 다음 화면에 반영해 줘야 하겠지?
3. 근데, webBrowser의 html text 를 나타내는 documentText 객체만 반영하면 반영안된다.
즉, 문자열에 해당하는 html 을 동적으로 조립하고,
조립한 html 문자열을 webBrowser.documentText 에 할당한다고 해서 화면이 변경되는 게 아니란 거다.
그렇다고 webBrowser.Refresh() 해 버리면 화면이 리프레쉬 되어 버리니까 안되겠지?
이럴때에 해결법이다. 자세한건 역시나 http://stackoverflow.com/questions/174403/net-webbrowser-documenttext-isnt-changing 에서 참고.
11. 해결방법은 두가지인데, 그 첫번째는
webBrowser.Navigate("about:blank");
webBrowser.Document.OpenNew(false);
webBrowser.Document.Write(html);
12. 두번째는
webBrowser.Navigate("about:blank");
HtmlDocument doc = browser.Document;
doc.Write(String.Empty);
browser.DocumentText = _emailHTML;
둘 다 비슷하니 본인 취향에 맞추어 쓰면 된다.
핵심을 설명하자면
1. webBrowser 객체를 사용할 때, 먼저 webBrowser.Navigate("about:blank"); 로 랜더링을 한 번 해 줄것.
이거 안 해 주면 아무리 documentText 에 값 넣어도 안된다.
2. browser.DocumentText 에 바로 쓰지 말고 webBrowser.Document.Write() 로 쓸 것.
Document.Write() 로 써야 DOM 객체가 생성 + 화면 랜더링이 작동되나 보다.
3. 만약 안되면 webBrowser.Refresh(); 써봐라.
난 안 써도 되던데, 예제에는 있더라고.
혹시 안되는 사람들은 같이 써 봐라.
'프로그램 > C#' 카테고리의 다른 글
ms access 에서 ISNULL() 쿼리함수. (0) | 2016.03.31 |
---|---|
C#에서 ms access 암호 있을때 connection string + 코드로 mdb 암호 변경 수정. (0) | 2016.03.24 |
gridview 의 button 의 생성 타이밍이 gridview.Add() 가 아니다. (0) | 2016.01.20 |
[]datagridview (0) | 2016.01.18 |
javascript 의 prompt 와 같은 , 메시지 입력창 기능의 코드 (0) | 2016.01.09 |