如何让网页上的Flash视频在弹出窗口中播放

 我来答
mwZZ31EN52
2012-11-15
知道答主
回答量:8
采纳率:0%
帮助的人:3.4万
展开全部
很多浏览器都有这个功能,当你把鼠标移动到网页视频上,就可以看到顶部有一个按钮出现,弹出独立播放器。当你点击按钮,视频就弹出在新窗口播放了,这时候视频窗口的大小可以自由调整不再受页面的限制。
另一个想法是,把页面里视频相关的HTML代码提取出来,然后在一个新页面框架里显示。但是这样的话,就必须对页面代码的结构非常熟悉,而且必须跟随变化。还有,当新视频窗口弹出时,播放进度是不能保持的,必须重头播放。
其实有一个简单的办法,那就是把页面里的Flash控件重新激活到另一个窗口上。因为我们知道,Flash其实是一个ActiveX控件,运行在IE容器里。如果我们创建一个新的Ole Container,就可以把Flash控件激活到新的Container里。这样,Flash控件就可以在保持状态的情况下在不同的容器之间转换,既自由的在页面和弹出窗口中切换。
所以,要弹出(IE)页面里的Flash视频,需要以下几步:
1. �0�2通过Web Browser控件或者BHO,在页面加载完成后得到页面的DOM模型,找到Embed节点对象,即可查到Flash空间。
2. �0�2创建Ole容器,比如ATL的CAxWindow
3. �0�2激活Flash控件到新的Ole容器
代码片段(基于ATL):
//pFlashDisp为Flash控件对象,通过分析页面DOM获得
//保存IE容器,用于恢复
CComQIPtr<IOleObject spFlashOleObj = pFlashDisp;
spFlashOleObj-GetClientSite(&m_spIESite);
//必选先关闭,才能转移到新的窗口上
spFlashOleObj-DoVerb(OLEIVERB_HIDE, NULL, m_spIESite, 0, NULL, NULL);
spFlashOleObj-Close(OLECLOSE_NOSAVE);
//创建新的Ole容器(ATL的CAxWindow类)
CRect clientRect;
GetClientRect(&clientRect);
m_HostWin.Create(m_hWnd, &clientRect, NULL, WS_CHILD);
CComPtr<IAxWinHostWindow spHost;
m_HostWin.QueryHost(&spHost);
//使得Flash可以查询到IE提供的IServiceProvider,比如可以打开新的网页
CComQIPtr<IObjectWithSite spObjWithSite;
m_HostWin.QueryHost(IID_IObjectWithSite, (void**)&spObjWithSite);
spObjWithSite-SetSite(pOuterSite);
//激活到新容器, m_hWnd为m_HostWin的父窗口
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式