HTML поверх плагина NPAPI - PullRequest
       37

HTML поверх плагина NPAPI

3 голосов
/ 04 декабря 2011

После того, как я закончил писать свой плагин для браузера, используя FireBreath и OpenGL, и встроил плагин, используя тег объекта, я попытался наложить различные элементы HTML поверх плагина.К сожалению, графика и теги плагинов всегда оставались поверх любого другого HTML-элемента на странице, независимо от того, что я пытался.

Насколько я знаю, плагин flash позволяет накладывать HTML следующим образом:

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

Существует ли общий способ включения наложений HTML или тегов?Если нет, есть ли способ включить оверлеи для плагинов NPAPI / ActiveX или FireBreath каким-то образом поддерживает эту функцию?

StackOverFlow был моим основным ресурсом с тех пор, как я начал программировать, так что большое спасибо всем!

Ответы [ 2 ]

7 голосов
/ 04 декабря 2011

Существует два типа плагинов;оконный и без окон.FireBreath поддерживает плагины без окон (верните true из функции isWindowless в вашем классе плагинов. Если вы используете плагин без окон, то вы можете наложить HTML поверх плагина. Если вы делаете плагин с окнами, то вы не можете.

Однако это не так просто, как кажется. Если вы прочитаете вокруг, вы обнаружите, что производительность flash с wmode = transparent не так хороша, как с обычным wmode, и причина в том, чтоЧтобы рисовать без окон, вы должны рисовать только по указанию браузера. К счастью, вы можете попросить браузер попросить вас перерисовать (в FireBreath, вызвав InvalidateWindow для объекта PluginWindowlessWin, который вы получите в качестве окна).

К сожалению, в режиме рисования без окон вы не получаете hWND - просто hDC, и он действителен только на время события рисования (RefreshEvent в FireBreath). Как я могу определить, вы не можете создать openglконтекст рисования на hDC, который может измениться или исчезнуть между вызовами рисования,И поэтому единственный способ, которым я видел, как плагин opengl работает с рисованием без окон в Windows, - это рисовать вне экрана, а затем использовать GDI для перетаскивания битов в hDC.

Вот пример, который рисует сырой битовый массивиспользуя любой тип рисунка (с окном или без окна), который может помочь вам укрепить ваше понимание того, что я пытался объяснить выше: https://gist.github.com/1068352

5 голосов
/ 28 мая 2013

Попробуйте это решение, которое отлично сработало для меня.

Поместите фиктивный 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

}
...