如何在Web浏览器控件中阻止flash元素

时间:2012-01-17 05:24:26

标签: c# flash browser

我在其中构建了一个带有WebBrowser控件的C#应用​​程序,并且我试图找到一种方法来使网页中的Flash内容无法显示,因为它正在吸收 ton 我的CPU和内存。我一直试图通过browser.Document.GetElementsByTagName(“object”)获取它并将其outerHtml设置为空字符串,从而删除页面中的<object>标签(只有一个)。它返回一个元素(由Count属性确认)但访问第一个元素([0])会给出索引超出范围的错误。我已经尝试通过foreach循环来完成它,但没有任何事情发生,并且没有错误。如果我尝试检索<div>元素而不是<object>元素,则会运行foreach循环。我在这里做错了,有没有错误,还是有更好的方法来删除Flash内容?非常感谢任何帮助。

我的代码:

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

顺便说一下,中触发了DocumentCompleted事件之后运行

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

2 个答案:

答案 0 :(得分:1)

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

选项2: 尝试使用FiddlerCore(您可以将其添加到您的应用中),privoxy(这将在您的本地计算机上的应用外部运行)或其他代理实际阻止Flash(.swf)内容从到达你的本地机器。使用FiddlerCore,您可以监视每个Web请求/响应,并根据HTTP内容类型终止请求/响应。此选项会导致代理网络的CPU /内存损失,但仍可能低于Flash使用自身。

答案 1 :(得分:0)

为什么不在页面上使用注入JavaScript来禁止在闪存存在之前写入闪存?我不知道页面使用的是什么flash库,但是重写main方法来做任何事情都相当容易。

e.g。

swfobject.embedSWF = function(){}