在Webkit中更改其“位置”样式属性时删除了插件实例

时间:2013-01-07 14:59:02

标签: css webkit npapi

我正在努力解决一个奇怪的(Webkit特定的?)效应:
当更改插件对象的'position'属性时,我的插件会被删除并立即被另一个刚刚实例化的插件替换。

这意味着我正在丢失当前插件的所有状态并重新开始使用新插件。

我不知道这是否是特定于Webkit的,因为我的插件只能在我们的嵌入式平台上运行。

以下是代码:

<object id="mypluginobject" type="video/myplugin" style="width=800px, height=600px">

在javascript中,我这样做:

var myobject = $('mypluginobject');
myobject.style.width = '1280px'; // OK
myobject.style.height= '720px'; // OK
myobject.style.position='fixed'; // myobject disapears and is replaced by a new instance

在NPAPI代码中,我可以看到NPN_Destroy()被调用,紧接着是NPN_New(),所有内容都使用相同的NPP指针。

这让我想知道为什么这个'position'属性似乎会触发我对象的完全替换。

在现实生活中发生的事情是我丢失了所有运行时信息,视频停止了,我无法恢复。 我知道我的平台非常具有异国情调,因此可能存在所有这些的副作用:

  • Webkit 322
  • 在Qt 4.7.2上运行
  • 和DirectFB

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,这在所有浏览器上都非常标准。您遇到的问题是,当您更改“位置”时,它会更改对象所在的容器;通过这样做,您实质上使浏览器(从内部)将其从页面中删除,然后将其重新添加。

通过在某些浏览器上更改“可见性”或“显示”,您可以导致完全相同的问题。 “溢出”也会普遍触发这一点。在某些情况下,将高度和宽度设置为小于1px乘以1px也是一个类似的坏主意。插件不好玩吗?

避免对象及其父元素上的这些东西,你会没事的。我使用的解决方法是在我需要移动它时始终绝对定位插件本身然后我使用jquery来计算“定位”元素的大小和位置,我做任何我通常想做的事情。它可以移动,并且在任何时候(或在事件或计时器上)我计算新位置并将对象标记的浮动绝对定位父div重新定位到新位置。这有点hackish,特别是如果你想要修复它,但这是我知道解决问题的唯一方法。

我想你也可以让你的插件擅长恢复它的状态,当然,这样当它被删除和读取时无关紧要。 =]