0

我有一个插件并嵌入到我的网页页面中,该插件用于播放媒体文件(.mp3、mp4、m3u8 等)。我的网页如下所示:

<div id='div1'>Plugin</div>
<div id='div2'><div id='div2sub'></div></div>

插件创建像

<object id='plugin' type='xxxx' width='xxxx' height='xxxx'></object>

问题是:当我将插件从 div1 移动到 div2sub 时,例如:

var x = document.getElementById('plugin');
var y = document.getElementById('div2sub');
y.appenChild(x);

然后我找到结果 IE:插件仍在播放媒体文件、视频、音频输出,它工作正常(ActiveX 插件) Chrome 和 FireFox:没有视频、音频输出,插件不再播放媒体文件。(npapi 插件)

我发现原因是:使用 IE,插件刚刚移动,而不是销毁然后重新创建,使用 chrome 和 FireFox,插件被销毁然后重新创建,我有一个函数可以在 pluin 上注册回调事件,chrome 控制台显示我的插件从未收到回调事件,因此无法播放媒体文件。

我的问题是:无论如何我只能移动插件,并且插件不会被 chrome 和 FireFox 破坏和重新创建,就像 IE 一样。

感谢帮助...

4

2 回答 2

1

如果插件真的被重新创建,你应该提交一个错误- 重新创建不应该根据 WhatWG对象元素正在渲染的部分重新生成插件。

于 2013-08-02T07:25:05.117 回答
1

不过,这是 npapi 插件的一个非常标准的问题;当您在 DOM 中移动它们时,它们在我所知道的任何浏览器中的行为都不可靠。如果您将父容器更改为显示:无、可见性:隐藏、溢出:无等,也会出现类似问题。ActiveX 控件更有趣。

我使用的解决方法是将插件放在浮动绝对定位的 div 中。我将另一个 div 放在我希望插件所在的页面上,然后每当需要移动它时,我都会计算定位 div 的绝对位置并将浮动 div 移动到它上面。这有点hack,但效果很好。

于 2013-08-02T22:21:55.027 回答