[C#] 확장형 브라우져 AxWebBrowser -2

개발 노트/C#  2013.10.20 09:59


안녕하세요.. 명월입니다...

 

요즘 하루하루 날씨가 추워지고 있습니다.. 모두들 감기 조심하세요...

이번 포스팅에서는 예전에 포스팅 했던 AxWebBrowser에 대한 조금 더 자세한 설명(?)을 하겠습니다... (사실 이것과 관련된 문의가 있어서 그게에 대한 답변이 더 가깝네요 ^^)

 

http://nowonbun.tistory.com/187

 

예전에 포스팅 했을 때에는 스크래핑에 이용하기 위해 설명했던걸로 기억되네요...

 

그럼 먼저 이 브라우져를 썻을때의 문제점을 살펴 보겠습니다.

 

 

이 단축키가 먹는 문제점입니다... 저는 여태 윈도우만 해서 그냥 메시지를 잡으면 되겠거니라고 생각을 한 부분인데요... 이 부분은 컨트롤의 메시지가 아니고 msHtml 객체의 이벤트이더라구요.... 그래서 메시지에 나타나지가 않았습니다... 처음 봤을 때 순간 흠칫 당황했습니다..

이 객체는 100% 컨트롤이 힘든건가 하구요... 그런데 이벤트가 있었습니다.. 그 부분만 막으면 이벤트를 막을 수 있습니다.

 

 

위는 이벤트로 막는 부분이고 아래는 내부객체로 막는 부분입니다.. 이걸 두개 다 작성하실 껀 없고 상황에 맞게 하나만 작성해도 되겠습니다.

 

이벤트는 막았고 그다음엔 다운로드를 막는 것입니다.

 

 

자 요놈을 막는 건데... 요것도 이벤트가 있네요... 근데 이걸하면서 특이한게 내부객체가 없더라구요.... 이런 컨트롤은 또 첨봤습니다.. 그렇다고 메시지 잡아내서 내부객체 만들기도 귀찮으니깐 그냥 이벤트로 처리하겠습니다.

 

 

요녀석은 이벤트 내에 cancel 값이 있습니다. 그냥 이벤트 취소 시킨다고 하면 이 이벤트를 막을 수 있겠네요...

 

이번에는 팝업 제어 입니다... 이전 포스팅에서 한 것은 현재 폼이 모달리스로 폼을 호출하면서 부모 폼이 닫기면 전체가 닫기는 현상에 대한 것 입니다..

 

이 부분은 두가지를 생각해 봤는데요... 부모 폼을 큰 윈도우 제어 윈도우로 만들고 하위를 전부 모달리스로 호출하면 이 현상은 없어집니다.. 그러나 이건 뭐랄까 조금 복잡하고 상황에 맞지 않으면 낭비(?)적인 형태이겠네요...

 

가볍게 생각하면 그냥 프로그램을 재 호출하면 이 문제는 가볍게 풀릴 듯하네요...

 

뭐 위의 형태로 쓰이는 경우도 물론 있지만... 아마 큰 프로젝트에서 모든 컨트롤을 제어해야 할 경우에만 쓰이겠네요... 그냥 우리는 가볍게 가보겠습니다.

 

일단 문제는 이거겠네요.. 내가 원하는건 같은 창인데 익스플로러가 뜨는 현상

 

 

그냥 Url을 받아서 자기 자신을 호출하겠습니다.

 

 

프로세스로 자기 자신의 프로그램을 다시 실행시킵니다.

메인에서는 파라미터를 넘기면 생성자로 넘깁니다.

 

 

넘어 와서는 그 URL대로 Navigate를 호출하는 형태네요....

 

 

물론 창이 하나 꺼진다고 해서 다른 창에 영향이 가는건 아닙니다....

 

여기까지 설명입니다.. 더 부족하거나 알고 싶은 내용이 있으면 댓글이나 메일 주세요...

예제 소스 첨부 합니다...

 

AxBrowserTest.zip


댓글 4개가 달렸습니다.
댓글쓰기
  1. travel34
    2013.10.25 11:08 신고 |  수정/삭제  댓글쓰기

    폼을 위와 같은 방식으로 생성하면.. 세션이 유지가 안되는 것 같더라구요
    예를 들어 네이버 메일화면에서 좌측이 있는 메뉴를 클릭하면 새 창이 열립니다. 이 경우 새 창에 로그인을 하라는 창이 뜨더라구요.. 결국 전에 올려주신 방법으로 테스트를 하고 있습니다...ㅜㅜ

    • 明月 v명월v
      2013.10.26 09:32 신고 |  수정/삭제

      블로그 방문 감사합니다...
      말씀하신대로 위에 소스는 프로세스를 다시 기동하는 방식이기에 세션이 유지 안되는게 맞습니다...
      세션 유지를 하려면 조금 더 복잡해 지지요... 세션 동기화 작업이 필요하니깐요....
      아니면 하나의 프로그램으로 여러개의 창을 만들어서 세션을 공유하는 방법 밖에 없네요.. ^^

  2. 김대희
    2014.03.25 22:03 신고 |  수정/삭제  댓글쓰기

    질문이 있어서 댓글남깁니다.
    c#윈폼으로 프로그램 작성중인데요

    폼하나에webbrower 2개(web1,web2)를 올려놓구요
    web1에서 링크를 눌렀을때 새창이 뜨지 않고 web2에 뜨게 하고 싶습니다

    private void web1_NewWindow(object sender, CancelEventArgs e)
    {
    e.Cancel = true;//새창막기
    }

    NewWindow이벤트를 이용해서 할수 있는방법이 있을까요?
    이벤트 함수안에 어떤식으로 작성해야
    새창이 web2에 뜰수 있을지 질문드려봅니다.

  3. 행인1
    2014.09.11 12:04 신고 |  수정/삭제  댓글쓰기

    우연히 들렀는데요..ㅎ 궁금한게 있어요. 제가 waitn이라는 라이브러리를 사용하는데 에러가 너무많이 나서 다른걸로 해볼까 생각하고 잇습니다. 그중에 webbrowser로 하는건데 문제가 alert 잡아내는게 쉽지 않더라고요. alert뜨고 나서 더이상 진행이 안되는 문제죠.. 지금 위에 프로젝트로 alert도 잡아낼 수 있나요?