在我使用FireBreath和OpenGL编写浏览器插件并使用对象标签嵌入插件后,我尝试在插件上叠加各种HTML元素。不幸的是,无论我尝试什么,标签和插件图形始终位于页面上任何其他HTML元素的顶部。
据我所知,flash插件允许HTML叠加,如下所示:
<param name="wmode" value="transparent">
是否有通用的方法来启用HTML叠加或标记?如果没有,有没有办法在NPAPI / ActiveX插件上启用叠加,或者FireBreath是否支持此功能?
自从我开始编程以来,StackOverFlow一直是我的主要资源,非常感谢大家!答案 0 :(得分:7)
插件有两种类型;窗口无窗。 FireBreath确实支持无窗口插件(从插件类中的isWindowless函数返回true。如果你做一个无窗口插件,那么你可以在插件上叠加HTML。如果你做一个窗口插件,那么你不能。< / p>
然而,它并不像听起来那么容易。如果你四处阅读,你会发现闪存的wmode = transparent性能不如普通的wmode好,原因是为了绘制无窗口,你必须只在浏览器指示时绘制。幸运的是,您可以要求浏览器告诉您重绘(在FireBreath中通过调用PluginWindowlessWin对象上的InvalidateWindow作为您的窗口)。
不幸的是,在没有窗口的绘图模式下,你没有得到一个hWND - 只是一个hDC,它只在绘制事件的持续时间内有效(FireBreath中的RefreshEvent)。我可以确定,你不能在hDC上创建一个可以在绘制调用之间改变或消失的opengl绘图上下文,所以我看到一个opengl插件在Windows上使用无窗口绘图的唯一方法是在屏幕外绘制然后使用GDI将位滑动到hDC。
这是一个使用任何一种绘图(窗口或无窗口)绘制原始位图的示例,可以帮助您巩固对我上面尝试解释的内容的理解:https://gist.github.com/1068352
答案 1 :(得分: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
.myClass
{
position:absolute;
width:250px; // your required height and width for the overlay html
height:250px;
other css as per your style
}