2010-03-25 3 views
0

페이지를로드 한 다음 페이지에서 일부 요소를 제거하려고합니다. 그렇게하면서 이상한 행동을 만났습니다. 내가 할 때WebBrowser.Document.Body.InnerHtml 이상한 동작

webBrowser1.Document.Body.InnerHtml = webBrowser1.Document.Body.InnerHtml; 

일부 JavaScript 코드가 해제됩니다. 예를 들어 Google.com의 경우 자동 완성 기능이 꺼집니다. 왜 그런가요? JavaScript 초기화와 관련이 있다고 가정합니다. 그렇다면 어떻게 페이지를 다시 초기화 할 수 있습니까?

upd : 방금 ​​만든 새 프로젝트, 단추 두 개가 & WebBrowser입니다. 같은 것. 코드는 다음과 같습니다.

private void button1_Click(object sender, EventArgs e) 
{ 
    webBrowser1.Navigate("http://google.com"); 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    webBrowser1.Document.Body.InnerHtml = webBrowser1.Document.Body.InnerHtml; 
} 

답변

0

이 문제가 해결되었습니다. InnerHtml 속성을 설정하면 DOM 구조가 깨집니다. 해결책은 Microsoft.mshtml 네임 스페이스와 appendChild 및 removeChild와 같은 메서드를 사용하는 것입니다.

-1

왜 이러한 코드 줄에서 'webBrowser1'부분을 사용해야할지 확실하지 않습니다.

페이지가로드되면 대부분의 자동 완성이 적용되는 것으로 가정합니다. 그들은 아마도 각 요소를 모니터링하지만 그 요소에 직접 연결되어 있지는 않습니다. 따라서 실제로 페이지의 HTMl 본문을 재설정하면 JS가 2watching하는 요소가 제거되지만 절대로 다시 호출되지 않습니다. 나는 구글이 사람들에게 그것이 무엇인지 알기 어렵도록 JS에 재미있는 것을 한 번 들었다.

+0

webBrowser1은 내 양식의 WebBrowser 유형 제어입니다. 사실 저는 다른 웹 사이트에서 일하고 있습니다. 예를 들어 Google을 선택했습니다. – Poma

+0

왜 내가 투표 한 이유에 대해 혼란 스러웠습니다 ... webBrowser1이 양식 요소 인 경우, Document.Body.InnerHTML 속성에 액세스하려고 시도하지 않는 것이 좋습니다. 저는 google.com이 좋은 예임을 알고 있습니다. 따라서 저는 그러한 행동을 믿는 이유를 설명하기 위해 예제를 사용했습니다. 그러나 귀하의 의견에 비추어 볼 때, 나는 당신의 코드가 JS 엔진을 혼란스럽게하고 있다고 생각합니다. 어떤 브라우저를 사용하고 있습니까? 복용량이 다른 것들에서 동일하게 발생합니까? – thecoshman

+0

그것은 내가 아니에요 :) 내가 100 미만의 평판을 가지고 있기 때문에 투표를 할 수 없다. – Poma