NPAPI:修改插件对象的 CSS 属性
NPAPI: modify plugin object's CSS properties
我正在为基于WebKit的嵌入式浏览器编程一个NPAPI插件。这个插件处理的对象之一是一个视频帧,我希望通过它的javascript属性width
和height
来调整其大小。
因此,在我的C++插件实现中,我通过NPAPI NP_Class函数指针公开了这两个属性(width和height)(在我的情况下,它们映射到HasProperty/GetProperty/SetProperty 现在,让我困扰的是,当网页中的Javascript出现以下情况时: 它成功地进入了我的C++代码,并执行了视频大小调整(在我的嵌入式平台中,它直接进入视频驱动程序) 由于这个 所以,问题: 我承认我更喜欢第一个版本,因为它可以让浏览器决定何时重新绘制,这样我就可以拥有一个几乎无状态的视频插件<object id="video" type="video/myPluginMimeType" style="height:150px;"></object>
<script>
var video = $('video');
video.height = 250; // all happens here
</script>
但是,紧接着,浏览器通过NPN_setWindow()函数调用我,返回视频对象的原始维度(本例中为150px高)。NPP_setWindow
也直接映射到视频驱动程序,所以我在眨眼之间只看到250像素高的视频。我怀疑这一切都是由于浏览器只将原始的"样式"属性作为重要属性。video.height
的后续调用唯一地执行大小调整
此外,第一个版本使网页能够更改插件DOM对象的CSS属性,这将通过NPP_setWindow调用自动反映出来。
<object>
s和其他元素一样都是HTML元素;您可以使用element.style.width
和element.style.height
更改它们的宽度和高度。一旦尺寸发生变化,就应该立即调用NPP_SetWindow,这样就不需要手动滚动自己的可设置宽度和高度属性。
好的,我找到了解决方案,所以我把这个留给其他人:
-
我在aboslut值(
object.style.width = 150;
)中设置宽度,而不是使用长度值(如下所述:http://www.w3.org/TR/css3-values/)。正确的javascript代码需要如下:object.style.width = 150 + "px"; // or "150px" directly
-
总的来说,我真正的问题是我不知道如何从插件C++代码中影响对象的CSS属性。我在这里找到了解决方案:你必须使用NPN_GetValue(我的对象)/NPN_GetProperty(我对象上的"style")/NPN_SetProperty(style属性上的"width")才能做到这一点。
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 如何在运行中期切换GTK CSS style_context
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- GTKMM可以通过编程方式更改类的CSS属性
- 如何将按钮属性应用于 css
- 我可以为我的自定义Qt UI元素定义自定义CSS/QSS属性吗?
- NPAPI:修改插件对象的 CSS 属性