2012-01-17 90 views
2

我使用WebBrowser控件构建了一个C#应用程序,并且我试图找出一种方法来让网页中的Flash内容不显示,因为它是吸吮我的CPU和内存的一个。我一直试图通过browser.Document.GetElementsByTagName(“object”)获取它并将其outerHtml设置为空字符串,从而在页面中删除<object>标记(只有一个)。它返回一个元素(由Count属性确认),但访问第一个元素([0])给出的索引超出范围错误。我试过通过foreach循环来做,但没有任何反应,也没有任何错误。如果我尝试检索<div>元素而不是<object>元素,则会运行foreach循环。我在这里做错了什么,有没有错误,或者有更好的方法来删除Flash内容?任何帮助不胜感激。如何在Web浏览器控件中阻止Flash元素

我的代码:

​​

顺便说一句,这是正在运行后DocumentCompleted事件已被解雇。

编辑:我刚才发现,当DocumentCompleted事件被调用时,它在JavaScript将Flash内容注入页面之前被调用。我尝试了一些类似“睡眠”的方法,但它们都阻止了网页的处理。任何方式等待更多的时间(5秒左右),而网页继续呈现?

+0

webBrowser.Document.All [“flashobjectID”]你可以试试这个..它是一样的东西的getElementById您回应,但 – 2012-01-17 05:54:28

+0

谢谢了''标签有动态变化的ID,以便让他们通过ID只为一个工作页面。 – petschekr 2012-01-17 15:20:39

回答

1

选项1: 你可以使用System.Threading.Timer尝试和等待额外的时间动态注入的Flash。这不应阻止WebBrowser在您等待时运行。

选项2: 试着这么做FiddlerCore(你将添加到您的应用程序),privoxy(这将在本地计算机上的应用程序外运行)或其他一些代理实际遮挡闪光灯(瑞士法郎)含量从不断到你的本地机器。使用FiddlerCore,您可以监控每个Web请求/响应,并根据HTTP内容类型终止请求/响应。这个选项会导致代理网络的CPU /内存命中,但仍然可能低于Flash使用本身。

+0

感谢您提供选项1.我使用了一种不同形式的计时器,它阻止停止浏览器继续渲染的线程。 – petschekr 2012-01-28 15:30:21

0

为什么不在页面上使用注入JavaScript来禁用在Flash存在之前写入?我不知道该页面使用的是什么闪存库,但重写主要方法什么也不做是很容易的。

例如

swfobject.embedSWF = function(){}