1. 程式人生 > >如何讓網頁上的Flash視訊在彈出視窗中播放

如何讓網頁上的Flash視訊在彈出視窗中播放

很多瀏覽器都有這個功能,當你把滑鼠移動到網頁視訊上,就可以看到頂部有一個按鈕出現,彈出獨立播放器。當你點選按鈕,視訊就彈出在新視窗播放了,這時候視訊視窗的大小可以自由調整不再受頁面的限制。
這是如何做到的呢?
首先想到的是,瀏覽器縮放縮放了頁面的大小,正好可以顯示視訊視窗的大小。好像火狐有一個魔鏡功能,可以實現網頁簡報既擷取網頁任意部分。 要做到這點,瀏覽器的外框程式必須是自己寫的(國內的瀏覽器都是這樣的)。如果瀏覽器不是自己的,能不能通過BHO來實現呢?
另一個想法是,把頁面裡視訊相關的HTML程式碼提取出來,然後在一個新頁面框架裡顯示。但是這樣的話,就必須對頁面程式碼的結構非常熟悉,而且必須跟隨變化。還有,當新視訊視窗彈出時,播放進度是不能保持的,必須重頭播放。

其實有一個簡單的辦法,那就是把頁面裡的Flash控制元件重新啟用到另一個視窗上。因為我們知道,Flash其實是一個ActiveX控制元件,執行在IE容器裡。如果我們建立一個新的Ole Container,就可以把Flash控制元件啟用到新的Container裡。這樣,Flash控制元件就可以在保持狀態的情況下在不同的容器之間轉換,既自由的在頁面和彈出視窗中切換。


所以,要彈出(IE)頁面裡的Flash視訊,需要以下幾步:
1.  通過Web Browser控制元件或者BHO,在頁面載入完成後得到頁面的DOM模型,找到Embed節點物件,即可查到Flash空間。
2.  建立Ole容器,比如ATL的CAxWindow
3.  啟用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的父視窗
spHost->AttachControl(spFlashOleObj, m_hWnd);
 

相關推薦

如何網頁Flash視訊視窗播放

很多瀏覽器都有這個功能,當你把滑鼠移動到網頁視訊上,就可以看到頂部有一個按鈕出現,彈出獨立播放器。當你點選按鈕,視訊就彈出在新視窗播放了,這時候視訊視窗的大小可以自由調整不再受頁面的限制。 這是如何做到的呢? 首先想到的是,瀏覽器縮放縮放了頁面的大小,正好可以顯示視訊視窗的大小。好像火狐有一個魔鏡功能,可以

ArcGIS API for Silverlight開發滑鼠左鍵點選地圖的點視窗及右鍵點選快捷選單的實現程式碼

1、首先在SL專案中新增一個抽象類ContextMenu.cs檔案,程式碼如下:using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.

HTML-通過點選網頁的文字QQ新增好友頁面

在網上參考了部分方法,綜合了一下。 發現有2中方式: 第一種是不能直接彈出新增介面的,只能彈出網頁,再通過網頁中的新增好友才能新增: 彈出的網頁是這樣的(我是寫成在新的網頁中開啟) 現在看實現的程式碼: <html> <

detailview按鈕列 點選視窗使用datagrid

$(function(){ $('#dg').datagrid({ title:'test', view:detailview, remoteSort:false, sin

視窗重新整理父頁面的iframe包含的頁面

<iframe src="1.htm" name="ifrmname" id="ifrmid"></iframe> 方案一:用iframe的name屬性定位     <input type="button" name="Button" value="Button" oncl

SweetAlert訊息視窗更加具有個性化!

SweetAlert SweetAlert是指可對JavaScript標準功能的alert()及confirm()的彈出視窗進行個性化定製的庫。 SweetAlert的要點 官網上有很多示例,看了這些基本上就OK了。但是,在kintone上使用時,【彈出訊息後更新頁面】這個處理只參照示例來寫的

在HTML網頁設定視窗的辦法

【1、最基本的彈出視窗程式碼】 其實程式碼非常簡單: <SCRIPT LANGUAGE="javascript"> <!-- window.open ('page.html') --> </SCRIPT> 因為這是一段javascrip

lhgdialog視窗一級視窗時,二級視窗在一級視窗下面,如何他到一級視窗上面?

一級視窗頁面就不給大家提供了,二級視窗頁面如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/

通過網頁修改activex安全設定,新增信任站點,禁用視窗阻止程式

//新增信任站點ipWshShell.RegWrite("HKCU//Software//Microsoft//Windows//CurrentVersion//Internet Settings//ZoneMap//Ranges//Range100//","");WshShell.RegWrite("HKC

如何視窗自適應圖片的大小

解決思路: 主要思路是用window.open()方法開啟一個視窗,然後再根據圖片的大小resizeTo()視窗大小,必要時再用moveTo()方法調整視窗位置。現在問題在於如何獲取圖片的大小。 具體步驟: 方法一。我們知道,DHTML裡有個Image()物件,只要設定圖片源

點選視窗,在視窗播放視訊文…

<!--視訊彈出樣式開始--> <LINK rel=stylesheet type=text/css href="js/lightwindow.css"> <SCRIPT language=JavaScript type=text/javascript src="js/4

解決安卓手機軟鍵盤擠壓背景的問題

彈出 鍵盤 color col 軟鍵盤 func class div res demo: // 解決本頁面軟鍵盤彈窗背景擠壓的問題 var clientHeight = document.documentElement.clientHeight || documen

Skyline Terra Explorer6.6視窗實現複製功能

前段時間繼續下來的基於Skyline的B/S專案,是基於Terra Explorer6.6實現的。專案中涉及到基於三維模型查詢裝置編碼等操作,從使用者友好角度來講,查詢到的裝置編碼應該要支援複製,方便使用者基於編碼的二次查詢和操作。 1. Terra Explorer彈出視窗限制 通常來說,在瀏覽器中複製

關於視窗的設定

<dx:ASPxPopupControl ID="ASPxPopupControl1" runat="server" CloseOnEscape="True"             Modal

Android視窗

protected void PopUp() { final PopupWindow popup = new PopupWindow(TestActivity.this); View popView = LayoutInflater.from(TestA

fancybox關閉視窗parent fancybox close

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

自定義視窗

第一步:建立視窗0,並拖拽3個按鈕 第二步:建立視窗1,設定屬性“背景”,“大小” 第三步:建立變數,ButtonNumber 用於標記屬於哪個按鈕執行的視窗 第四步:對應的指令碼指令碼事件如下 (1)視窗0 ==> 按鈕“視窗1”==>事件==&g

1007 設定datawindow視窗用於複雜欄位編

1:業務需求,某個欄位的編輯過成需要通過複雜的邏輯才能得出編輯的結果(計算器,評分等) 2:設定tag <popupeditorwithdw col4return="mdltitle" col4sqlwhere="sqlwhere" col4editordwo="editordwo" editorc

selenium +python 如何得到視窗

# 獲取當前的頁面視窗 first_handle = brower.current_window_handle handles = brower.window_handles for i in handles: if i != first_handle: brower.close()

高仿element-ui自定義角標

最近要寫個彈框,發現element-ui彈框樣式還可以,就copy下來改吧改吧。 html程式碼 <!--彈框--> <div class="el-dropdown-menu el-popper" :style="'position: absolute; top: