앞서 Go언어의 lxn/win, lxn/walk 그리고 제가 막 만든(강조합니다 막 만든겁니다) walk_wrap.go 를 이용해서 윈도 GUI 프로그래밍을 할때.. 웹뷰를 추가 가능한데요..
이 웹뷰는 ..
IE기반의 OLE 객체를 끌어다 동작을 하는지라 최신 웹 브라우저에 비해선 기능이 조금 ;; 제한적이긴 합니다. 그중 가장큰 문제는 .. 자바스크립트 오류가 발생시에는 ..

이런식으로 스크립트 오류창이 뜬다는 것이지요. 최신 브라우져들의 경우엔 개발자도구를 지원하기 때문에 이런식으로 자바스크립트 오류가 뜬다해서 메시지 창을 띄워가며 실행을 하네마네를 묻지 않습니다. 이게 상당히 거슬리는데 ..
아마 인터넷에 뒤져보시면 ..
iwebbrowser2 javascript error 대충 이런 검색을 해보면 ..
이렇게 에뮬레이션 모드 관련된 레지스트리 값을 변경해서 이 웹뷰컨트롤의 모드를 조정할수 있다고 하는 등의 몇가지 방법들이 일반적으로 찾아 질겁니다 ..
그.러.나..
css 처리나 기타 몇가지 케이스에선 차이가 나올진 모르겠지만 .. 이 윈도에 기본 내장된 웹뷰 컨트롤 자체도 업데이트가 전혀 없던 놈은 아닌지라 .. xp 시절같이 그렇게 극악스럽진 않습니다만 ..
하여튼간에 ;; 여러 방법을 쓰더라도 .. 자바스크립트의 작은 오류 하나만 있어도 메시지 창을 통해서 리포트하는 저 구조는 변하질 않는다는게 문제입니다.
그래서 가장 보편적으로 사용가능한 방법을 알려 드립니다.
간단히 말해서 이 IWebBrowser2 컨트롤의 내부에는 Silent mode 에 대한 flag 값이 존재 합니다.

이렇게 .. 두가지 메소드가 제공이되고 하나는 현재 상태를 얻는것 두번째는 해당 값을 변경하는 것인데 .. get, set 이 아니라 get, put?? 이네요 ㅋㅋ 하여튼 저시절 개발자들은 뭐하나라도 다르게 할라고 용을 아주 그냥 ㅋㅋ 환자들 에혀 ..
여튼간에 put_Silent 를 통해서 silent 모드를 켜면 저 오류창을 보지 않을수 있습니다……………만!!
여기서 주의하실점이 한가지 있습니다. 이 silent 모드는 저런 자바스크립트 오류창만 죽이는게 아닙니다. 저렇게 따로 다이얼로그 형태로 동작하는 모든 창을 무시합니다.
예를들어 웹페이지에서 자바스크립트로 띄우는 alert() 함수라던지 .. 요즘은 잘 사용되지 않는 http 의 기본 basic auth 창 ..

대충 이런것들 ..
싹.다 안뜹니다..
그래서 .. 만약 특정 창.. 그러니까.. 이런식으로 뜨는 창들중에 자바스크립트 오류에 해당하는 창만 안띄우려 하면 좀더 고차원적인 방법으로.. 창을 스폰시키는 부분에서 분리하여 처리를 해주는 방법도 인터넷 찾으면 나오지만 .. 이걸 Go로 싹다 구현을 한다는것도 귀찮고 ..
현재 저는 .. 그냥 제 블로그의 글들이나 좀 보여주면 되는데다 ..
보통은 이 웹뷰를 내장시키는건 .. 광고 노출정도나 간단한 공지사항 노출정도를 보통 쓰기 때문에 ..
이 silent 모드를 켜는 부분에 대한 것을 말씀드리겠습니다.
이걸 하려면 lxn/win 이랑 lxn/walk에 메소드를 추가를 해야 합니다만.. 보통 요즘 트렌드로 치자면 이런 짓을 하려면 제가 저 두 패키지를 다 받아다가 추가를 해서 따로 repo를 파서 .. 패키지를 따로 .. pirogom/win, pirogom/walk 이딴 식으로 .. 새로 새끼쳐서 올리거나 해야겠지만 ..
전 일단 깃헙 계정을 안만든 데다.. ( 언젠간 하것쥬 .. ) , SVN성애자 인대다 .. 결정적으로 귀찮은 관계로 ..
어느 파일에다 뭘 추가해서 어케 쓰면 되는지를 알려드리겠습니다.
우선 lxn/win/shdocvw.go 파일에서
func (wb2 *IWebBrowser2) Put_Silent(Flag int32) HRESULT {
ret, _, _ := syscall.Syscall(wb2.LpVtbl.Put_Silent, 2,
uintptr(unsafe.Pointer(wb2)),
uintptr(Flag),
0)
return HRESULT(ret)
}
대충 적당한 위치에 위 메소드를 추가하시구요 .. 저는 Refresh 와 Put_Left 사이에 추가해 넣었습니다.

이제 ..
lxn/walk/webview.go 파일에서
func (wv *WebView) SetSilent() error {
return wv.withWebBrowser2(func(webBrowser2 *win.IWebBrowser2) error {
webBrowser2.Put_Silent(1)
return nil
})
}
이렇게 앞서 lxn/win 에서 추가한 Put_Silent 메소드를 호출합니다. silent 값은 기본이 false 라 켜는 함수만 만들었습니다.
이렇게 한뒤에 ..
제가 앞서 강좌글에서 다룬 walk_wrap.go 파일 안의
func (m *WinResMgr) WebView(url string) *walk.WebView {
wv, _ := walk.NewWebView(m.GetParent())
wv.SetSilent()
wv.SetURL(url)
m.addObj(wv)
return wv
}
WebView 생성 함수 안에다가 만든 메소드를 추가하셔도 되구요 .. 이 함수는 놔두고 선별적으로 저걸 끄고 싶으시면 ..
리턴된 walk.WebView 객체에서 SetSilent 함수를 호출하시면 되겠습니다.
이상입니다.