2012-01-17 2 views
2

WebBrowser 컨트롤이있는 C# 응용 프로그램을 만들고 웹 페이지의 플래시 내용을 빠져 나오지 않게하는 방법을 알아 내려고합니다. 내 CPU와 메모리의 . 나는 페이지에서 <object> 태그를 제거하려고 시도했다. 하나 밖에 없다. browser.Document.GetElementsByTagName ("object")을 통해 가져 와서 outerHtml을 빈 문자열로 설정했다. (Count 속성으로 확인 된) 하나의 요소를 반환하지만 첫 번째 요소 ([0])에 액세스하면 범위를 벗어난 인덱스에 대한 인덱스가 반환됩니다. 나는 foreach 루프를 통해 그것을 시도했지만 아무것도 전혀 일어나지 않으며 에러가 없다. <object> 요소 대신 <div> 요소를 검색하려고하면 foreach 루프가 실행됩니다. 내가 여기서 잘못된 것을하고 있습니까, 아니면 버그가 있습니까? 아니면 플래시 콘텐츠를 제거하는 더 좋은 방법이 있습니까? 어떤 도움이라도 대단히 감사합니다.웹 브라우저 컨트롤에서 플래시 요소를 차단하는 방법

내 코드 : 그런데

HtmlElementCollection flashElements = webBrowser.Document.GetElementsByTagName("object"); 
foreach (HtmlElement element in flashElements) 
{ 
    element.OuterHtml = ""; 
    MessageBox.Show("Deleted"); 
} 

이는 DocumentCompleted 이벤트가 해고 된 후 을 실행하고있다.

EDIT : DocumentCompleted 이벤트가 호출되는 동안 JavaScript가 Flash 내용을 페이지에 삽입하기 전에 호출되고 있다는 것을 알았습니다. 나는 몇 가지 "수면"과 같은 방법을 시도했지만 웹 페이지가 모두 처리되는 것을 막습니다. 웹 페이지가 계속 렌더링되는 동안 더 많은 시간 (5 초 정도)을 기다리는 방법은 없습니까?

+0

webBrowser.Document.All [ "flashobjectID"] 시도해 볼 수 있습니까? getElementbyid와 같은 것입니다. –

+0

응답을 보내 주셔서 감사합니다.하지만 ''태그는 동적으로 ID가 변경되므로 ID로 가져 오는 것은 한 페이지에서만 작동합니다. . – petschekr

답변

1

옵션 1 : 당신은 시도하고 동적으로 주입 플래시에 대한 여분의 대기 시간을 위해이 System.Threading.Timer를 사용할 수 있습니다. 기다리는 동안 WebBrowser가 실행되지 않도록해야합니다.

옵션 2 : FiddlerCore 같은 (앱이를 추가), privoxy (이 로컬 컴퓨터에 외부 앱 실행됩니다) 또는 실제로 플래시 (.SWF) 컨텐츠를 차단하는 다른 프록시를보십시오 이제까지 당신의 국부적으로 기계에 얻기에서. FiddlerCore를 사용하면 각 웹 요청/응답을 모니터링하고 HTTP 콘텐츠 유형에 따라 요청/응답을 중단 할 수 있습니다. 이 옵션을 사용하면 네트워크 프락시의 CPU/메모리 적중률이 발생하지만 플래시가 사용하는 것보다 적습니다.

+0

옵션 1을 제안 해 주셔서 감사합니다. 저는 웹 브라우저가 멈추는 것을 멈추게하는 다른 형태의 타이머를 사용하여 렌더링을 계속하고있었습니다. – petschekr

0

플래시가 쓰기 전에 페이지 쓰기 기능을 사용하지 않는 이유는 무엇입니까? 나는 어떤 플래시 라이브러리가 페이지를 사용하고 있는지 알지 못하지만, 아무것도하지 않기 위해 main 메소드를 재 작성하는 것은 상당히 쉽다.

swfobject.embedSWF = function(){} 
관련 문제