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



我构建了一个带有WebBrowser控件的C#应用程序,我正试图找到一种方法,使网页中的flash内容不显示,因为它占用了我吨的CPU和内存。我一直试图通过浏览器删除页面中的<object>标记(只有一个)。Document.GetElementsByTagName("object")并将其outerHtml设置为空字符串。它返回一个元素(由Count属性确认),但访问第一个元素([0])会导致索引超出范围错误。我试过通过foreach循环来做,但什么都没发生,也没有错误。如果我尝试检索<div>元素而不是<object>元素,foreach循环就会运行。我是不是做错了什么,是不是有漏洞,或者有更好的方法删除flash内容?非常感谢您的帮助。

我的代码:

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

顺便说一句,这是在触发DocumentCompleted事件后运行的。

EDIT:我刚刚发现,当DocumentCompleted事件被调用时,它是在JavaScript将flash内容注入页面之前被调用的。我尝试过一些类似"睡眠"的方法,但它们都阻止了网页的处理。有什么方法可以在网页继续渲染时等待更多时间(5秒左右)?

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

选项2:尝试像FiddlerCore(你会把它添加到你的应用程序中)、privoxy(它会在你的本地机器上的应用程序之外运行)或其他一些代理来实际阻止Flash(.swf)内容进入你的本地计算机。使用FiddlerCore,您可以监视每个web请求/响应,并根据HTTP内容类型终止请求/响应。此选项将导致代理网络的CPU/内存命中率,但仍可能低于Flash本身的使用率。

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

例如

swfobject.embedSWF = function(){}

最新更新