我正在尝试在选项卡式ExtJS应用程序中使用自定义视频播放器NPAPI插件(查看FireBreath)。该插件位于一个选项卡中,其他插件包含其他非视频数据的演示文稿。
从tab切换到tab时,包含该插件的元素将被销毁,并且所有插件状态都将丢失。是否有任何方法可以配置ExtJS选项卡式面板,以便在切换到另一个选项卡(只是隐藏)时不会更改其中包含的html?另一种方法是在返回选项卡时重新填充插件状态,但这会导致不可接受的延迟(主要是在等待视频关键帧时)。
谢谢, 0
答案 0 :(得分:1)
我不知道你的ExtJS方法,如果你可以在那方面解决它当然是首选。
但是,如果不能,则可以通过将流处理移动到在后台运行的帮助应用程序来避免重新初始化。该插件将根据需要启动它,并在注册后从其接收流数据 帮助器将被告知何时杀死流并且可能在一些超时后自行终止它(以避免在插件崩溃等情况下会话泄漏)。
答案 1 :(得分:0)
我正考虑按照上面的建议考虑帮助应用程序,或者考虑将插件重写为无窗口。对于其他JS框架,两者都可能是更强大的解决方案。
幸运的是,解决方案最终比这更简单,至少对于ExtJS而言。默认情况下,ExtJS在选项卡式视图的div上设置"display: none"
,只要它不显示,它会调用插件析构函数。在更多地查看其庞大的API之后,ExtJS将参数hideMode
作为Ext.panel.Panel基类的一部分:
'display':使用display:none style隐藏Component。
'visibility':使用visibility:hidden样式隐藏Component。
'offsets':通过将组件绝对定位在文档的可见区域之外,将隐藏组件。当隐藏的组件必须保持可测量的尺寸时,这很有用。隐藏使用显示会导致零维度的组件。
默认为:“显示”
将包含插件的父面板设置为hideMode: 'offsets'
可以完美解决问题。