2012-03-22 1 views
1

Я программирую плагин 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.

ответ

1

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

  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++ кода. Я нашел решение here: вам нужно использовать NPN_GetValue (мой объект)/NPN_GetProperty («стиль» на моем объекте)/NPN_SetProperty («width» для свойства style).

+0

Честно говоря, я нашел, что лучше всего оставить сам тег объекта 100%, 100% и модифицировать содержащий div; таким образом, вы с меньшей вероятностью столкнетесь с конфликтами с самим объектом плагина. – taxilian

+0

Да, это то, что я думал, но я не могу контролировать, как люди будут использовать мой объект плагина. Некоторые из них могут захотеть возиться со свойствами CSS этого парня ... – Gui13

+0

NPN_getProperty -> NPN_GetProperty; NPN_setProperty -> NPN_SetProperty; –

2

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

+0

Вот где проблема: когда, скажем, я делаю это в JS: 'element.style.height = 150;', браузер ищет объект 'style' в моем NPAPI-объекте. Поскольку я не раскрыл это свойство, он терпит неудачу, и я никогда не вижу вызова NPP_setWindow. Браузер, похоже, не делает различий между свойствами стиля CSS и свойствами моего объекта. – Gui13

+0

См. Мой ответ (на мой вопрос ... я знаю): Мне не удалось отправить длину в правильном формате. – Gui13