《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 利用Plug-in技術(shù)擴展應(yīng)用程序的Web應(yīng)用

利用Plug-in技術(shù)擴展應(yīng)用程序的Web應(yīng)用

2009-08-26
作者:趙黔莉

??? 摘? 要: 討論Plug-in的基本原理和開發(fā)方法,實現(xiàn)了一個H.263解碼器的插件,并研究了如何把應(yīng)用程序通過Plug-in技術(shù)嵌入瀏覽器中。

  關(guān)鍵詞: 瀏覽器? Netscape/Mozilla? Plug-in? 插件? MIME

?

  Plug-in是擴展瀏覽器功能的一項重要技術(shù)。通過Plug-in技術(shù),各種應(yīng)用程序和集成軟件能夠以插件模型直接嵌入到網(wǎng)頁中,提供靈活的Web應(yīng)用。但是對于一些大型的獨立應(yīng)用程序很難將其改造成插件模型。本文主要介紹如何利用Plug-in技術(shù)把一個大型或單獨運行的應(yīng)用程序嵌入到瀏覽器中。

1? Plug-in的開發(fā)結(jié)構(gòu)

1.1 Plug-in的基本原理

  Plug-in是Netscape公司提出的一種瀏覽器插件技術(shù)。Plug-in插件的生存周期完全由網(wǎng)頁控制。具體控制過程如下。

  (1)當(dāng)瀏覽器讀取HTML網(wǎng)頁時,若遇到MIME類型的標(biāo)記時,它首先搜索是否有注冊該類型的Plug-in插件。

  (2)如果有,將該Plug-in插件的代碼載入內(nèi)存。

  (3)瀏覽器初始化Plug-in的環(huán)境。

  (4)創(chuàng)建該Plug-in插件的實例,用于處理和顯示網(wǎng)頁中指定的數(shù)據(jù)流。

  (5)當(dāng)該網(wǎng)頁關(guān)閉或轉(zhuǎn)到后臺時,瀏覽器銷毀該Plug-in插件的實例。

  (6)瀏覽器關(guān)閉前,退出Plug-in的環(huán)境。

  由如上過程可以看出,Plug-in在運行時完全作為瀏覽器的一部分。但是,由于Plug-in的編寫一般由第三方創(chuàng)建,所以Plug-in插件的開發(fā)必須遵循Netscape公司提出的標(biāo)準(zhǔn)規(guī)范。Plug-in技術(shù)的應(yīng)用非常廣泛,一般瀏覽器中的多媒體顯示都是通過插件的方式由第三方提供的,如Flash等。

1.2 Plug-in的基本結(jié)構(gòu)

  Plug-in雖然是一個獨立的模塊,但它是由Mozilla瀏覽器來調(diào)用的。本質(zhì)上說,Plug-in接管了一個指定大小的顯示窗口,窗口的繪制和內(nèi)容顯示則完全由Plug-in插件來控制。所以開發(fā)者可以將所提供的任何功能和應(yīng)用放置在該窗口中。

  Netscape/Mozilla制訂了瀏覽器和Plug-in的標(biāo)準(zhǔn)通信過程,但是整個運行過程的核心是瀏覽器和Plug-in插件互操作過程,如圖1所示。

?

  圖中以NPP開頭的函數(shù)是在Plug-in中實現(xiàn)的由瀏覽器調(diào)用的接口,而以NPN開頭的函數(shù)是在瀏覽器中實現(xiàn)的由Plug-in調(diào)用的接口。這二類標(biāo)準(zhǔn)函數(shù)保證了瀏覽器和Plug-in能夠進(jìn)行數(shù)據(jù)交換和操作。這些操作主要分為以下幾類。

  (1)窗口的內(nèi)容繪制、顯示和事件處理。其中最主要的是函數(shù)NPP_SetWindow,它使瀏覽器指定了Plug-in插件所操縱的窗口顯示區(qū)域。

  (2)數(shù)據(jù)流的處理,用于瀏覽器和Plug-in之間的數(shù)據(jù)及文件內(nèi)容的雙向傳遞,主要通過流的方式傳遞數(shù)據(jù)。

  (3)URL的處理,用于控制瀏覽器中超鏈的檢索、顯示和跳轉(zhuǎn)。

  (4)內(nèi)存操作和其他相關(guān)信息。

  這些接口適用于Netscape4.0和最新的Mozilla瀏覽器版本。由于Plug-in程序必須以動態(tài)庫的形式由瀏覽器調(diào)用,因此針對不同的操作系統(tǒng)其實現(xiàn)方式也不同,但是其API的設(shè)計非常靈活。

2?完整Plug-in程序的開發(fā)

  根據(jù)Plug-in程序的基本原理和結(jié)構(gòu),可以針對特定的操作系統(tǒng)(Windows或Linux)開發(fā)相應(yīng)的Plug-in程序。通常Plug-in插件的顯示是通過HTML網(wǎng)頁中的Embed或Object的標(biāo)簽進(jìn)行設(shè)置的。在瀏覽器對網(wǎng)頁進(jìn)行顯示時,如遇到Embed或Object標(biāo)簽,瀏覽器會根據(jù)指定的大小創(chuàng)建一個窗口句柄,并通過調(diào)用函數(shù)NPP_SetWindow把該窗口句柄傳遞給Plug-in插件。至于窗口內(nèi)容的顯示和操作完全由Plug-in插件來控制和處理,而Plug-in所需要的數(shù)據(jù)或文件則通過Stream流進(jìn)行通信。

  本文設(shè)計了一個獨立的Plug-in插件,其功能是播放一個H.263格式的圖像壓縮文件。顯示結(jié)構(gòu)為。

  

  其核心部分是通過函數(shù)NPP_SetWindow傳遞窗口句柄并通過Stream流傳遞H.263的文件內(nèi)容,然后設(shè)置Plug-in插件的回調(diào)函數(shù),即窗口處理函數(shù)。針對本H.263插件的處理過程如下。

  (1)在函數(shù)NPP_SetWindow中,調(diào)用SubclassWindow(mhWnd,(WNDPROC)WinProc),使該窗口能夠截取窗口消息并繪制窗口。

  (2)通過函數(shù)NPP_StreamAsFile把網(wǎng)頁中URL指定的服務(wù)器上H.263文件內(nèi)容保存為一個本地臨時文件并傳遞給Plug-in插件。當(dāng)Plug-in偵聽到該臨時文件后,將H.263文件解壓為YUV內(nèi)容,并顯示。

  (3)在回調(diào)函數(shù)WinProc中,處理該窗口中的WM_PAINT消息,最終完成YUV文件的顯示播放。

  本例中回調(diào)函數(shù)WinProc僅僅處理了最簡單的WM_PAINT消息。但是一個功能強大的Plug-in插件,可以實現(xiàn)更復(fù)雜的回調(diào)函數(shù),使Plug-in窗口包含鍵盤、鼠標(biāo)的操作和菜單、工具欄的功能等。例如在該Plug-in中可以加入播放、暫停、結(jié)束、循環(huán)等一般性操作,這些操作經(jīng)過消息映射后都可以實現(xiàn)。

3?應(yīng)用程序嵌入瀏覽器中

  一個完整的Plug-in插件可以根據(jù)需求實現(xiàn)各種應(yīng)用。但是為了嵌入到瀏覽器中,這類程序不能很大、很復(fù)雜,其功能是有限的。在開發(fā)辦公自動化等應(yīng)用集成的一類系統(tǒng)中,經(jīng)常需要把某些獨立的程序和第三方軟件集成到B/S應(yīng)用的系統(tǒng)中。如何把獨立的應(yīng)用程序嵌入瀏覽器中顯得尤為重要。

  由于許多大型程序無法被改造為Plug-in的方式,因此,需要通過Plug-in技術(shù)為應(yīng)用程序嵌入到瀏覽器中提供橋梁。通常一個應(yīng)用程序是無法直接嵌入瀏覽器的網(wǎng)頁中,為此必須直接修改應(yīng)用程序的源碼。本文研究了一個普通的Windows程序的修改和實現(xiàn)過程。

3.1 Plug-in的橋接

  因為Netscape/Mozilla之類的瀏覽器直接調(diào)用第三方程序時只能通過Plug-in的方式實現(xiàn),所以必須事先完成一個Plug-in插件,用于橋接瀏覽器和應(yīng)用程序之間的通信。該Plug-in插件的內(nèi)容與上一節(jié)中完整Plug-in插件的開發(fā)類似,但是并非必須實現(xiàn)其中的函數(shù)NPP_StreamAsFile。因為這種把應(yīng)用程序嵌入瀏覽器的方法通常是直接操縱本地硬盤的文件,不需要通過瀏覽器接受服務(wù)器上的數(shù)據(jù)流。

3.2 應(yīng)用程序的修改

  把獨立應(yīng)用程序直接嵌入到瀏覽器的實現(xiàn)方式如下。

  (1)在Plug-in插件的函數(shù)NPP_SetWindow中必須把窗口句柄mhWnd傳遞給應(yīng)用程序。

  (2)應(yīng)用程序在命令行參數(shù)中接收窗口句柄,或者應(yīng)用程序采用偵聽的方式等待Plug-in插件傳送過來的窗口句柄。

  (3)應(yīng)用程序在CreateWindow操作前設(shè)置自己的主窗口屬性,例如在VC的程序中CMainFrame∷PreCreateWindow設(shè)置的父窗口句柄就是Plug-in中傳來的mhWnd,并把自己窗口屬性設(shè)置為WS_CHILD以作為一個子窗口顯示在Plug-in窗口中。

  (4)設(shè)置窗口的回調(diào)函數(shù),并指定該窗口所能接收的消息和操作。一般用程序自身的回調(diào)函數(shù)即可,不需要修改。

3.3 程序接口的輸出

  通過以上過程,即可把一個應(yīng)用程序完全地嵌入瀏覽器中。但是在通常的辦公自動化應(yīng)用中,還需要使該程序支持Script腳本的調(diào)用,例如支持JavaScript的調(diào)用是一種常見的需求和應(yīng)用。為了使這種Plug-in插件支持Script腳本,Plug-in需要輸出一些額外的接口,簡要過程為:(1)給Plug-in的每個輸出接口分配一個UID號,可以用Windows下的uuidgen程序產(chǎn)生。(2)編寫接口的IDL文件。(3)在Plug-in程序中實現(xiàn)該接口的定義。

  由于在Plug-in程序中輸出的接口函數(shù)通常必須由應(yīng)用程序自己來實現(xiàn),所以如果應(yīng)用程序要支持Script腳本的調(diào)用,就必須采用某種機制接收特定消息,如采用Socket的偵聽或組件模型來實現(xiàn)。

3.4 實際演示

  通過以上方式,一個應(yīng)用程序可以嵌入到瀏覽器中,并且可以支持Script腳本的調(diào)用。圖2是利用Plug-in技術(shù)把一個YUV實時播放程序嵌入到Mozilla瀏覽器中。由圖2可以看出,一個獨立的應(yīng)用程序可以作為網(wǎng)頁的一部分嵌入到瀏覽器中。這樣對基于B/S模式的辦公自動化系統(tǒng),普通用戶完全可以在瀏覽器中直接完成所有的工作,如經(jīng)過定制后的發(fā)文、收文、撰寫和視頻會議系統(tǒng)等。這樣不僅增強了這類集成系統(tǒng)的友好性和易用性,而且簡化了用戶的學(xué)習(xí)和使用過程,具有良好的應(yīng)用需求。

?

4? 結(jié)? 論

  通過Plug-in方式能夠?qū)崿F(xiàn)瀏覽器的各種增強功能。本文根據(jù)Plug-in開發(fā)模式,實現(xiàn)了一個多媒體播放的Plug-in插件,使得用戶能夠通過瀏覽器訪問并播放網(wǎng)上的H.263多媒體文件。本文還研究了如何把一個獨立的應(yīng)用程序通過Plug-in技術(shù)嵌入到Mozilla瀏覽器中。這種技術(shù)大大豐富了瀏覽器的應(yīng)用環(huán)境,對現(xiàn)有基于B/S模式的應(yīng)用集成系統(tǒng)具有十分重要的使用價值。

?

參考文獻(xiàn)?

1?Netscape Communications.Netscape Gecko Plug-in?API Reference.http://devedge.netscape.com/library/?

manuals/2002/plugin/1.0/,2002-10-05?

2?劉毅.Plug-in結(jié)構(gòu)應(yīng)用程序設(shè)計.計算機應(yīng)用,2002;22(4)?

3?沈慧杰.利用Plug-in技術(shù)增強瀏覽器/服務(wù)器功能.計算機應(yīng)用,1998;18(11)?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲免费激情| 久久久另类综合| 欧美一区不卡| 亚洲一区免费观看| 99精品免费视频| 亚洲精品黄色| 日韩午夜在线| 亚洲另类视频| 一区二区精品国产| 中文精品视频| 亚洲中午字幕| 亚洲欧美制服另类日韩| 亚洲欧美日韩视频二区| 亚洲欧美成人网| 午夜久久电影网| 性欧美在线看片a免费观看| 欧美一级成年大片在线观看| 午夜一区二区三区不卡视频| 午夜在线精品| 久久精品国产清自在天天线| 亚洲国产婷婷| 一本大道久久精品懂色aⅴ| 亚洲视频成人| 亚洲一区二区免费视频| 午夜视频精品| 久久久久久网| 欧美xx69| 欧美色123| 国产精品影院在线观看| 国产亚洲欧美日韩日本| 影音先锋日韩精品| 99re6这里只有精品| 亚洲午夜精品福利| 性欧美暴力猛交69hd| 亚洲激情二区| 一区二区三区欧美| 欧美一区二区三区免费视频| 久久精品观看| 欧美不卡在线视频| 欧美视频一区在线观看| 国产精品有限公司| 伊人久久久大香线蕉综合直播| 亚洲国产精品久久久久婷婷884| 亚洲精品日韩一| 亚洲一区三区在线观看| 欧美在线视频一区二区| 亚洲精品欧美激情| 亚洲男人第一网站| 久久夜色精品亚洲噜噜国产mv | 午夜精品影院| 久久九九久久九九| 欧美麻豆久久久久久中文| 国产精品自拍视频| 亚洲国产精品ⅴa在线观看| 夜夜夜精品看看| 欧美一区二区三区婷婷月色 | 好看的亚洲午夜视频在线| 亚洲精品乱码视频| 欧美一区二区三区在线视频 | 免费成人黄色片| 欧美性片在线观看| 亚洲第一黄网| 亚洲女ⅴideoshd黑人| 亚洲二区免费| 亚洲在线观看| 欧美成人小视频| 国产日韩欧美综合精品| 99国产精品久久久久久久久久 | 欧美一区二区三区四区在线 | 99亚洲一区二区| 久久国产福利国产秒拍| 亚洲一级黄色片| 美女在线一区二区| 国产日韩欧美综合一区| 日韩一本二本av| 亚洲激情图片小说视频| 欧美一进一出视频| 欧美日韩美女在线观看| 一区二区三区在线视频观看| 中文av字幕一区| 日韩性生活视频| 麻豆国产精品777777在线| 国产欧美丝祙| 亚洲视频电影图片偷拍一区| 日韩视频一区二区三区| 久久久久久有精品国产| 国产精品任我爽爆在线播放| 亚洲另类视频| 亚洲人精品午夜| 久久精品在线免费观看| 国产精品一区二区你懂的| 日韩网站在线看片你懂的| 亚洲激情欧美| 久久亚洲一区二区| 国产拍揄自揄精品视频麻豆| 一区二区久久久久久| 日韩午夜精品视频| 欧美成人黄色小视频| 国内精品久久久久久久影视蜜臀| 亚洲一区二区在线看| 亚洲一区美女视频在线观看免费| 欧美连裤袜在线视频| 在线精品国产欧美| 亚洲国产精品小视频| 久久精品国产v日韩v亚洲| 国产精品素人视频| 亚洲图片欧美日产| 亚洲午夜一二三区视频| 欧美日本中文字幕| 亚洲精品国产精品乱码不99按摩| 亚洲国产一成人久久精品| 久久久久国产免费免费| 国产午夜久久| 午夜精品亚洲一区二区三区嫩草| 欧美一区二区三区免费视| 国产精品一区二区你懂得| 亚洲在线观看免费| 欧美影院一区| 国产一区二区电影在线观看| 欧美一区三区三区高中清蜜桃| 欧美综合激情网| 国产人成一区二区三区影院| 午夜精品视频在线观看| 久久精品视频在线播放| 国内精品写真在线观看| 亚洲高清一区二| 欧美va日韩va| 亚洲免费成人av| 亚洲一区3d动漫同人无遮挡| 国产精品久久久久久久久果冻传媒| 国产精品99久久久久久白浆小说| 亚洲永久在线| 国产欧美日韩另类一区| 久久国产主播精品| 欧美不卡一区| 亚洲靠逼com| 午夜日韩视频| 国内一区二区三区| 亚洲人成在线免费观看| 欧美日本一区二区高清播放视频| 一区二区av| 欧美一区二区在线播放| 激情成人av在线| 日韩香蕉视频| 国产精品美女久久久久久2018 | 在线综合欧美| 国产精品丝袜白浆摸在线| 欧美在线影院| 欧美xart系列在线观看| 日韩小视频在线观看| 先锋影音网一区二区| 国产一区亚洲一区| 亚洲精品一区二区三区蜜桃久| 欧美日韩大陆在线| 亚洲综合好骚| 久久综合999| 日韩一区二区电影网| 久久国产精品电影| 91久久综合| 先锋影音久久久| 亚洲观看高清完整版在线观看| 亚洲视频综合| 国产一区二区毛片| 99综合在线| 国产亚洲aⅴaaaaaa毛片| 亚洲欧洲一区二区在线播放| 欧美性猛交xxxx乱大交蜜桃| 欧美在线观看你懂的| 欧美精品 日韩| 亚洲欧美国产77777| 欧美国内亚洲| 午夜视频一区在线观看| 欧美人成在线视频| 欧美在线免费观看视频| 欧美日本成人| 欧美一区二区三区喷汁尤物| 欧美精品三级| 欧美在线一二三| 欧美午夜欧美| 亚洲精美视频| 国产精品中文字幕欧美| 亚洲乱码国产乱码精品精天堂| 国产欧美日韩免费看aⅴ视频| 亚洲三级色网| 国产视频一区在线| 中文av一区二区| 在线日韩成人| 久久精品卡一| 亚洲性图久久| 欧美剧在线免费观看网站| 久久精品久久99精品久久| 国产精品久久中文| 亚洲美女电影在线| 国语自产精品视频在线看一大j8| 亚洲在线免费视频| 亚洲日本成人| 免费成人黄色片| 欧美自拍偷拍午夜视频| 国产精品入口麻豆原神| 一本色道久久88精品综合|