FlashSelector - 选择性阻止 Flash






4.29/5 (6投票s)
使用 Internet Explorer BHO 的 Flash 屏蔽插件。
引言
当广告 Flash 在浏览器上飞来飞去,并且阻挡了您想阅读的内容时,这真的很烦人。有很多不同的方法来屏蔽 Flash,但我们无法利用那些现有的 Flash 屏蔽器的功能。因为许多网站开始使用 Flash 作为他们的菜单系统、多媒体工具等等。我们不能盲目地全部屏蔽它们。这变成了一个“两难选择”。
选择性地切换屏蔽/取消屏蔽 Flash
我不是 Flash 专家,但是 Flash 有两种,窗口 Flash 和无窗口 Flash。 窗口 Flash 比后者更快,而无窗口 Flash 可以具有透明特性。 我将在此展示的新的 Flash 屏蔽方法仅适用于窗口 Flash,但稍后将解决无窗口 Flash。
我的方法是简单地使用 CBT 钩子和窗口消息子类化功能。 当 BHO 通过 IObjectWithSite::SetSite
加载到 IE 站点时,会安装一个 CBT“线程特定的”钩子来监视新的窗口创建事件,特别是窗口类名称为“MacromediaFlashPlayerActiveX
”的事件。 当发现 Flash 窗口正在 CBT 钩子过程中创建时,使用新的消息过程(“FilterFlash.h”)再次对 Flash 窗口进行子类化。 在新的子类化过程的 WM_PAINT
消息处理程序中,将显示白色背景中的“[已屏蔽 Flash]”消息,而不是实际的 Flash 内容。 但是,如果用户单击特定的 Flash 窗口,则单击的 Flash 的原始窗口消息过程将恢复,以显示 Flash 内容。 就是这样!
注意我如何在“FiltherFlash.h”中处理 WM_NCCREATE
。 重要的是先调用 Flash 的原始消息过程,然后“再次”对 Flash 窗口进行子类化,因为在调用 Flash 的原始消息过程后,我们的子类化会以某种方式重置。 除此之外,这只是简单的窗口子类化和标准的 CBT 钩子过程,每个人都已经习惯了。
无窗口 Flash
无窗口 Flash 大多是广告。 因为它们没有窗口,所以无法将上述方法应用于无窗口 Flash。 因此,我只是从 John Osborn 的 Popup Blocker 复制了 Flash 屏蔽例程,以隐藏 Flash 和动画 GIF。 这不是一个完美的方法,因为在 HTML 页面完成加载之前,仍然可以在短时间内看到无窗口 Flash,但它的确可以正常工作。 由于“大多数”无窗口 Flash 都是广告,因此始终删除无窗口 Flash 似乎是合理的。 但是,如果您希望看到某个 Flash,我提供了一个临时的 Flash 屏蔽暂停键(可定制并且是 ALT、CTRL 或 SHIFT 键之一)。
结语
我一年前写了这个插件,并且在过去的一年中一直使用它,没有任何问题。 事实证明,这个插件对我非常有用,我的一点希望是有人可以将它移植到第三方浏览器,以便我在使用它们时可以使用此功能。