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