NPAPI: изменить свойства CSS объекта плагина - PullRequest
1 голос
/ 22 марта 2012

Я программирую плагин NPAPI для встроенного браузера на основе WebKit.Одним из объектов, обрабатываемых этим плагином, является видеокадр, размер которого я хочу изменить с помощью его свойств javascript, width и height.

Итак, в моей реализации плагина на C ++ я выставляю этидва свойства ( ширина и высота ) через указатели функций NPAPI NP_Class (которые сопоставляются с HasProperty / GetProperty / SetProperty методов в моем случае).

Теперь меня беспокоит то, что, когда Javascript на веб-странице делает что-то вроде этого:

<object id="video" type="video/myPluginMimeType" style="height:150px;"></object>
<script>
var video = $('video');
video.height = 250; // all happens here
</script>

Он успешно идетв мой C ++ код выполняет изменение размера видео (на моей встроенной платформе оно идет непосредственно к видеодрайверу).
НО , сразу после этого браузер вызывает меня через Функция NPN_setWindow () , возвращающая мне исходные размеры видеообъекта (высота 150px в этом примере).

Поскольку этот NPP_setWindow также напрямую связан с видеодрайвером, я вижу только мое видеос Высота 250 пикселей в мгновение ока.Я подозреваю, что это все из-за того, что браузер принимает только оригинальные атрибуты "style", которые учитываются.

Итак, вопросы:

  • Могу ли я сделать так, чтобы браузер обновил свою ширинуСвойства / height (даже style ?) каким-то образом через NPAPI?
  • Стоит ли просто игнорировать вызовы NPP_setWindow и выполнять изменение размера однозначно на основе первоначального вызова NPN_New () (который дает мнесвойства стиля объекта) и последующие вызовы video.height через API NP?

Я признаю, что предпочел бы первую версию, поскольку она позволяет браузеру решать, когда перерисовывать и таким образомУ меня может быть в значительной степени видео-плагин без сохранения состояния.
Кроме того, эта первая версия дает веб-странице возможность изменять CSS-свойства объекта DOM плагина, что будет автоматически отражаться через вызов NPP_setWindow.

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

<object> s являются элементами HTML, как и любые другие;Вы можете изменить их ширину и высоту с помощью element.style.width и element.style.height.Вы должны получить вызов NPP_SetWindow, как только размеры изменятся, поэтому вам не нужно будет вручную сверять свои собственные устанавливаемые свойства ширины и высоты.

1 голос
/ 23 марта 2012

Хорошо, я нашел решение (я), поэтому я оставлю это здесь для других парней:

  1. Я устанавливаю ширину в значениях aboslut (object.style.width = 150;) вместоиспользуя значение длины (как указано здесь: http://www.w3.org/TR/css3-values/).Правильный код JavaScript должен был выглядеть следующим образом: object.style.width = 150 + "px"; // or "150px" directly

  2. В целом, моя настоящая проблема заключалась в том, что я не знал, как повлиять на свойства CSS моего объекта из код плагина C ++.Я нашел решение здесь : чтобы сделать это, вам нужно использовать NPN_GetValue (мой объект) / NPN_GetProperty («стиль» для моего объекта) / NPN_SetProperty («ширина» в свойстве стиля).

...