Css 更改其';位置';Webkit中的样式属性

Css 更改其';位置';Webkit中的样式属性,css,webkit,npapi,Css,Webkit,Npapi,我正在与一种奇怪的(Webkit特有的?)效果作斗争: 更改插件对象的“位置”属性时,我的插件将被删除,并立即替换为另一个新实例化的插件 这意味着我将失去当前插件的所有状态,并从一个新插件开始 我不知道这是否是特定于Webkit的,因为我的插件只能在嵌入式平台上运行 代码如下: <object id="mypluginobject" type="video/myplugin" style="width=800px, height=600px"> 在NPAPI代码中,我可以看到调用了

我正在与一种奇怪的(Webkit特有的?)效果作斗争:
更改插件对象的“位置”属性时,我的插件将被删除,并立即替换为另一个新实例化的插件

这意味着我将失去当前插件的所有状态,并从一个新插件开始

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

代码如下:

<object id="mypluginobject" type="video/myplugin" style="width=800px, height=600px">
在NPAPI代码中,我可以看到调用了
NPN_Destroy()
,后面紧跟着一个
NPN_New()
,所有这些都具有相同的
NPP
指针

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

在现实生活中,我丢失了所有运行时信息,视频停止,无法恢复。 我知道我的平台很有异国情调,所以所有这些可能都有副作用:

  • 网络工具包322
  • 在Qt4.7.2上运行
  • 在DirectFB上

有什么想法吗?

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

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

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


当然,我想你也可以让你的插件擅长于恢复它的状态,这样当它被删除和读取时就不重要了

不幸的是,我检查了我使用的版本的Webkit代码,他们在我给他们的保存指针中丢弃了数据!所以,是的,我必须告诉使用我的插件的人,如果他们想让“全屏”功能工作,他们必须从一开始就在正确的位置方案中使用它。他们这样做了,但你可以通过某种清理机制和实例id或其他东西将其保存在全局内存中。有一些方法,只是不太好或干净=]注意这些情况(位置、显示等)略有不同。更改
位置
不会产生任何影响,但例如,转到
显示:无
实际上应该停止插件,因为“元素从渲染变为不渲染,反之亦然”-请参见和。(顺便说一下,Firefox在不久前变得更合理,当时(插件应该能够承受对象框架的重新渲染)已针对Firefox 13修复。)
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