javascript - NPAPI:修改插件对象的 CSS 属性

标签 javascript c++ dom npapi browser-plugin

我正在为基于 WebKit 的嵌入式浏览器编写 NPAPI 插件。此插件处理的对象之一是视频帧,我希望通过其 javascript 属性 widthheight 调整其大小。

因此,在插件的 C++ 实现中,我通过 NPAPI NP_Class 公开了这两个属性(widthheight)函数指针(在我的例子中映射到 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() 调用我函数,返回视频对象的原始尺寸(本例中为 150 像素高度)。

由于此 NPP_setWindow 也直接映射到视频驱动程序,我在眨眼间只能看到高度为 250px 的视频。 我怀疑这都是因为浏览器只将原始的“样式”属性作为重要的属性。

那么,问题:

  • 我能否让浏览器通过 NPAPI 以某种方式更新其宽度/高度(甚至是样式?)属性?
  • 我是否应该简单地忽略 NPP_setWindow 调用并根据对 NPN_New() 的初始调用(它为我提供对象的样式属性)和随后对 video.height 的调用执行唯一的调整大小NP API?

我承认我更喜欢第一个版本,因为它让浏览器决定何时重绘,这样我就可以拥有一个几乎无状态的视频插件。
此外,第一个版本使网页能够更改插件 DOM 对象的 CSS 属性,这将通过 NPP_setWindow 调用自动反射(reflect)出来。

最佳答案

<object> s 和其他元素一样是 HTML 元素;您可以使用 element.style.width 更改它们的宽度和高度和 element.style.height .一旦尺寸发生变化,您应该立即收到 NPP_SetWindow 调用,因此您无需手动设置自己的可设置宽度和高度属性。

关于javascript - NPAPI:修改插件对象的 CSS 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826392/

相关文章:

javascript - 页面在 IE 中完成加载时 MediaWiki 侧边栏回流

c++ - 快速线路查询的数据结构?

c++ - C++ 03中如何引用实例化模板函数的地址?

php - 如何从 DOM 中删除无效元素?

java - 如何动态返回每个节点的一组对象?

javascript - 如何在python中将json对象中的数据获取到字典中

javascript - 带有外部节点的 jstree 上下文菜单

javascript - 了解 underscore.js 代码的结构

c++ - 如何在 Windows 上使用 DirectShow 或其他工具充当麦克风?

javascript - 使用 DOM-Javascript VS 纯 Javascript 对象的陷阱?