Я программирую плагин NPAPI для встроенного браузера на основе WebKit. Один из объектов, обработанных этим плагином, - это видеокадра, которую я хочу изменить с помощью свойств javascript, width
и height
.NPAPI: свойства CSS объекта плагина
Итак, в моем 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++ код выполняет видео изменения размера (в моей встроенной платформе, он идет прямо к видеодрайверу).
BUT, сразу после этого я вызываюсь браузером через функцию NPN_setWindow(), возвращая исходные размеры видеообъекта (высота 150 пикселей в этом примере).
Так как это NPP_setWindow
также непосредственно сопоставлено с видеодрайвером, я вижу только мое видео с высотой 250 пикселей в мгновение ока. Я подозреваю, что все это связано с тем, что браузер использует только оригинальные атрибуты «стиль» как те, которые считаются.
Итак, вопросы:
- Могу ли я сделать браузер обновить его ширина/высота (даже стиль?) Свойства как-то через NPAPI?
- Должен ли я просто игнорировать вызовы NPP_setWindow и выполнять изменение размера уникальным образом на основе первоначального вызова NPN_New() (который дает мне свойства стиля объекта) и последующих вызовов на
video.height
через API NP?
Я признаю, что предпочел бы первую версию, так как она позволяет браузеру решать, когда перерисовывать, и таким образом у меня может быть довольно много плагинов без гражданства.
Кроме того, эта первая версия дает веб-странице возможность изменять свойства CSS объекта DOM плагина, который автоматически будет отображаться через вызов NPP_setWindow.
Честно говоря, я нашел, что лучше всего оставить сам тег объекта 100%, 100% и модифицировать содержащий div; таким образом, вы с меньшей вероятностью столкнетесь с конфликтами с самим объектом плагина. – taxilian
Да, это то, что я думал, но я не могу контролировать, как люди будут использовать мой объект плагина. Некоторые из них могут захотеть возиться со свойствами CSS этого парня ... – Gui13
NPN_getProperty -> NPN_GetProperty; NPN_setProperty -> NPN_SetProperty; –