0

我正在为一个奇怪的(Webkit 特有的?)效果而苦苦挣扎:
当更改插件对象的“位置”属性时,我的插件被删除并立即被另一个新实例化的插件替换。

这意味着我将丢失当前插件的所有状态并重新开始一个新插件。

我不知道这是否是特定于 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指针。

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

现实生活中发生的情况是,我丢失了所有运行时信息,视频停止,我无法恢复。我知道我的平台非常奇特,所以所有这些可能会有副作用:

  • 网络套件 322
  • 在 Qt 4.7.2 上运行
  • 在 DirectFB 上

任何的想法?

4

1 回答 1

1

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

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

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

我想你也可以让你的插件擅长恢复它的状态,当然,这样它什么时候被删除和重新加载都没有关系。=]

于 2013-01-08T00:41:11.277 回答