Javascript NPAPI:修改插件对象';s CSS属性

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

我正在为基于WebKit的嵌入式浏览器编写一个NPAPI插件。这个插件处理的对象之一是一个视频帧,我想通过它的javascript属性,
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调用,这样您就不需要手动滚动您自己的可设置宽度和高度属性。

好的,我找到了解决方案,所以我将把这个留给其他人:

  • 我在aboslut值(
    object.style.width=150;
    )中设置宽度,而不是使用长度值(如下所述:)。正确的javascript代码需要如下:
    object.style.width=150+“px”//或直接“150px”

  • 总的来说,我真正的问题是我不知道如何从插件C++代码中影响对象的CSS属性。 我找到了解决方案:您必须使用NPN_GetValue(我的对象)/NPN_GetProperty(“我的对象上的样式”)/NPN_SetProperty(“样式属性上的宽度”)来实现这一点


    这就是问题所在:比如说,当我在JS中这样做时:
    element.style.height=150,浏览器在我的NPAPI对象中查找
    样式
    对象。因为我没有公开那个属性,所以它失败了,而且我从来没有看到任何NPP_setWindow调用。浏览器似乎无法区分CSS样式属性和我的对象属性。请参阅我的答案(对我自己的问题…我知道):我未能以正确的格式发送长度。不过,老实说,我发现最好的办法是将对象标记本身保留为100%,100%,并修改包含的div;这样,你就不太可能与你的插件对象本身发生冲突。是的,这就是我的想法,但我无法控制人们如何使用我的插件对象。他们中的一些人可能想修补这个家伙的CSS属性……NPN_getProperty->NPN_getProperty;NPN_setProperty->NPN_setProperty;