【发布时间】:2012-03-22 16:21:14
【问题描述】:
我正在为基于 WebKit 的嵌入式浏览器编写一个 NPAPI 插件。这个插件处理的对象之一是一个视频帧,我想通过它的 javascript 属性来调整大小,width 和 height。
所以,在插件的 C++ 实现中,我通过 NPAPI NP_Class 函数指针(映射到 width 和 height)公开这两个属性em>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也是直接映射到视频驱动的,所以我一眨眼就只能看到我250px高的视频。
我怀疑这都是因为浏览器只将原始的“样式”属性作为重要的属性。
所以,问题:
- 我能否让浏览器通过 NPAPI 以某种方式更新其宽度/高度(甚至 style?)属性?
- 我是否应该简单地忽略 NPP_setWindow 调用并根据对 NPN_New() 的初始调用(它为我提供对象的样式属性)和随后通过 NP API 对
video.height的调用来唯一地执行调整大小?
我承认我更喜欢第一个版本,因为它让浏览器决定何时重绘,这样我就可以拥有一个几乎无状态的视频插件。
此外,第一个版本使网页能够更改插件 DOM 对象的 CSS 属性,这将通过 NPP_setWindow 调用自动反映。
【问题讨论】:
标签: javascript c++ dom npapi browser-plugin