Javascript NPAPI:修改插件对象';s CSS属性
我正在为基于WebKit的嵌入式浏览器编写一个NPAPI插件。这个插件处理的对象之一是一个视频帧,我想通过它的javascript属性,Javascript NPAPI:修改插件对象';s CSS属性,javascript,c++,dom,npapi,browser-plugin,Javascript,C++,Dom,Npapi,Browser Plugin,我正在为基于WebKit的嵌入式浏览器编写一个NPAPI插件。这个插件处理的对象之一是一个视频帧,我想通过它的javascript属性,width和height调整它的大小 这样,在插件的C++实现中,我通过NPAPI函数指针(这是我的情况下映射到HaseFrase/GETFielt/Stand属性方法)来公开这两个属性(宽度和高度)。 现在,让我烦恼的是,当网页中的Javascript出现以下情况时: <object id="video" type="video/myPluginMime
width
和height
调整它的大小
这样,在插件的C++实现中,我通过NPAPI函数指针(这是我的情况下映射到HaseFrase/GETFielt/Stand属性方法)来公开这两个属性(宽度和高度)。 现在,让我烦恼的是,当网页中的Javascript出现以下情况时:
<object id="video" type="video/myPluginMimeType" style="height:150px;"></object>
<script>
var video = $('video');
video.height = 250; // all happens here
</script>
var video=$('video');
video.height=250;//一切都发生在这里
它成功地进入了我的C++代码,执行了视频调整(在我的嵌入式平台上,它直接转到视频驱动程序)。 但是之后,浏览器通过函数调用我,返回视频对象的原始尺寸(本例中为150px高度)
由于此NPP_setWindow
也直接映射到视频驱动程序,因此我仅在眨眼时看到高度为250px的视频。
我怀疑这一切都是因为浏览器只将原始的“样式”属性作为重要属性
因此,问题是:
- 我可以通过NPAPI让浏览器更新其宽度/高度(甚至样式?)属性吗
- 我是否应该忽略NPP_setWindow调用,并根据对NPN_New()的初始调用(它为我提供了对象的样式属性)和通过NP API对
的后续调用,唯一地执行大小调整video.height
此外,此第一个版本使网页能够更改插件DOM对象的CSS属性,该属性将通过NPP_setWindow调用自动反映出来。
s与任何其他元素一样是HTML元素;您可以使用element.style.width
和element.style.height
更改它们的宽度和高度。一旦尺寸发生变化,您应该立即得到NPP_SetWindow调用,这样您就不需要手动滚动您自己的可设置宽度和高度属性。好的,我找到了解决方案,所以我将把这个留给其他人:
object.style.width=150;
)中设置宽度,而不是使用长度值(如下所述:)。正确的javascript代码需要如下:object.style.width=150+“px”//或直接“150px”
这就是问题所在:比如说,当我在JS中这样做时:
element.style.height=150代码>,浏览器在我的NPAPI对象中查找样式
对象。因为我没有公开那个属性,所以它失败了,而且我从来没有看到任何NPP_setWindow调用。浏览器似乎无法区分CSS样式属性和我的对象属性。请参阅我的答案(对我自己的问题…我知道):我未能以正确的格式发送长度。不过,老实说,我发现最好的办法是将对象标记本身保留为100%,100%,并修改包含的div;这样,你就不太可能与你的插件对象本身发生冲突。是的,这就是我的想法,但我无法控制人们如何使用我的插件对象。他们中的一些人可能想修补这个家伙的CSS属性……NPN_getProperty->NPN_getProperty;NPN_setProperty->NPN_setProperty;