2009-09-12 5 views
3

저는 브라우저의 현재 웹 페이지에서 발생하는 HTML 이벤트를 수신하는 C#으로 작성된 BHO/툴바에서 작업 해 왔습니다. 이 솔루션에는 HtmlPageEventManager라는 재사용 가능한 클래스가 포함되어 있습니다.이 클래스의 목적은 열어 본 새 웹 페이지 각각에 대해 HTML 이벤트 목록을 구독하는 것입니다. 목표는 페이지로드가 완료되기 전에도 사용자가 페이지 요소와 상호 작용을 시작할 수있게되면 핸들러를 부착하는 것입니다. 이 클래스를 사용하면 간단합니다 - 그냥 생성자 호출BHO에서 HTML 이벤트 듣기

var evts = new List() { 
    HtmlEvent.onclick, HtmlEvent.ondblclick, HtmlEvent.onkeydown, 
    HtmlEvent.onselectstart, HtmlEvent.onselectionchange, 
    HtmlEvent.onfocus, HtmlEvent.onselect 
}; 
new HtmlPageEventManager(this, evts, this.HtmlEventHandler);

하십시오 download my solution here 그것을 밖으로 시도하고 나에게 피드백을 보낼 수 있습니다. 자신의 프로젝트에서 유용하다고 생각되면 자유롭게 사용하십시오. 잘 작동하지만 이벤트를 첨부하지 못하는 경우가 있습니다. 나는 그 상황을 정확히 지적하는 데 어려움을 겪었다. 그래서 HtmlPageEventManager를 개선하는 데 도움이 될 수 있습니다.

내 솔루션은 SpicIE의 어셈블리를 참조하지만 위의 다운로드에는 포함되어 있지 않으므로 the SpicIE website에서 가져와야합니다. Btw, 아마도 이것은 SpicIE가 얼마나 인기가 있는지 묻기 좋은 시간 일 것입니다. 더 나은 도구를 사용할 수 있습니까?

+0

HtmlPageEventManager가 이벤트를 첨부하지 못하는 재현 가능한 사례를 발견했습니다. 웹 페이지를 처음 열면 95 %의 시간 동안 정상적으로 작동합니다. 그러나 해당 페이지를 새로 고치면 이벤트 등록이 손실됩니다. 디버거를 살펴보면 모든 것이 예상대로 보입니다. Google 검색 (http://www.google.com/search?q=IWebBrowser2+detect+refresh)은 이것이 일반적인 문제인 것으로 나타났습니다. 이걸 혼자 할 시간이 없을 것 같지 않아. 이런 식으로 HtmlPageEventManager를 개선하는 데 관심이 있으시면 여기에 게시하거나 연락하십시오. – HappyNomad

답변

2

예! BHO의 DownloadComplete 이벤트에 가입하여 "새로 고침"문제를 극복했습니다. 여기에서 다시 HTML 이벤트 처리기를 첨부하는 "RegisterEventHandlers"도우미 메서드를 호출합니다. 연결된 jeffamaphone 코드가 도움이되었습니다. 조건부로 RegisterEventHandlers를 호출하기 위해 "normalPageLoad"멤버 변수에 대한 아이디어를 통합했습니다. 나는 또한 the accompanying forum post을 보았다. 부모 창의 Loaded 이벤트에 대한 강조점을 이해할 수는 없습니다. 나는 그 부분조차하지 않고 일하는 내 코드를 얻었다. 어쨌든 HtmlPageEventManager는 이제 완전히 작동한다고 생각합니다. 나무를 노크합니다. 아직도 그 일을하지 않는 경우를 발견하면 소리 치십시오.

0

IE에서 페이지를로드하는 동안이를 수행 할 100 % 해결책이 없다는 것을 알게 될 것입니다. 그것은 당신의 잘못이 아닙니다 : IE의 이벤트 모델은 거대한 스파게티 대량의 비동기 코드로되어있어 제대로 작동하지 않습니다. 95 %의 솔루션이 있다면 행복하고 계속 나아가 야합니다.

+0

HtmlPageEventManager를 살펴보면 커다란 스파게티 질량을 수용 할 수있는 유연한 솔루션과 함께 할 수 있다는 것을 알게 될 것입니다. 이 아이디어는이 재사용 가능한 구성 요소에 세부 사항을 넣어 다른 사람들이 그 혜택을 누릴 수 있도록하는 것입니다. 네가 옳아서 나는 정말로 나아갈 필요가있다. 그래서 나는 내가 그것을 향상시키는 데 도움이 될 사람을 찾고 싶습니다. 문제는 이제 사용자가 웹 페이지를 새로 고침 할 때마다 이벤트가 처리되지 않고 플러그인이 작동을 멈추는 것입니다. – HappyNomad

+0

예, IE에서 새로 고침 이벤트를 처리하려고하면 전체 버즈 킬입니다. John Lister가 DemoButton에서 한 일을 살펴볼 수 있습니다. http://code.google.com/p/pricegoblin/wiki/DemoButton –