4

在我完成使用 FireBreath 和 OpenGL 编写浏览器插件并使用对象标签嵌入插件后,我尝试在插件顶部覆盖各种 HTML 元素。不幸的是,无论我尝试什么,标签和插件图形总是停留在页面上任何其他 HTML 元素的顶部。

据我所知,flash 插件允许 HTML 覆盖如下:

<param name="wmode" value="transparent">

有没有一种通用的方法来启用 HTML 覆盖或标签?如果没有,有没有办法在 NPAPI/ActiveX 插件上启用覆盖,或者 FireBreath 是否以某种方式支持此功能?

自从我开始编程以来,StackOverFlow 一直是我的主要资源,非常感谢大家!

4

2 回答 2

7

有两种类型的插件;有窗和无窗。FireBreath 确实支持无窗口插件(从插件类中的isWindowless函数返回 true。如果您使用无窗口插件,则可以在插件上覆盖 HTML。如果您使用有窗口插件,则不能。

然而,这并不像听起来那么容易。如果您仔细阅读,您会发现使用 wmode=transparent 时 flash 的性能不如使用普通 wmode 时的性能好,原因是为了无窗口绘制,您必须仅在浏览器指示时进行绘制。幸运的是,您可以要求浏览器告诉您重绘(在 FireBreath 中,通过调用 PluginWindowlessWin 对象上的 InvalidateWindow 来作为您的窗口)。

不幸的是,在无窗口绘图模式下,您不会获得 hWND - 只是一个 hDC,它仅在绘图事件期间有效(FireBreath 中的刷新事件)。据我所知,您不能在 hDC 上创建一个 opengl 绘图上下文,它可能会在绘图调用之间更改或消失,因此我看到 opengl 插件在 Windows 上与无窗口绘图一起工作的唯一方法是在屏幕外绘图,然后使用 GDI 将位传送到 hDC。

这是一个示例,它将使用任一类型的绘图(有窗口或无窗口)绘制原始位图,这可以帮助您巩固对我在上面试图解释的内容的理解:https ://gist.github.com/1068352

于 2011-12-04T01:33:31.573 回答
5

试试这个对我来说很完美的解决方案。

在插件下方放置一个虚拟 IFrame,并将所需的 html 放在它下方的 div 中。

<object id="myPlugin" height="yourRequiredHeight" width="yourRequiredWidth"></object>

<div id="wrapperDiv">
  <iframe class="myClass" > </iframe>
  <div class="myClass" >  My html goes here. It will be placed over the plugin!  </div>

</div>

和 CSS

。我的课

{

position:absolute;
width:250px; // your required height and width for the overlay html
height:250px;
other css as per your style

}
于 2013-05-28T11:29:02.883 回答