精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Qt Webkit中瀏覽器插件設(shè)計

移動開發(fā)
Qt Webkit中瀏覽器插件設(shè)計是本文要介紹對內(nèi)容,我們都知道瀏覽器中有一套由Netscape瀏覽器傳承下來的插件接口,

Qt Webkit瀏覽器插件設(shè)計是本文要介紹對內(nèi)容,我們都知道瀏覽器中有一套由Netscape瀏覽器傳承下來的插件接口,包括webkit,firefox都是支持的,但是那個開發(fā)起來比較困難,并且是平臺相關(guān)的,借助于Qt的跨平臺的特性,可以方便地為Qt開發(fā)出一套跨平臺的插件。

Qt Webkit中插件可以有兩種,一種Mime必須是application/x-qt-plugin或者application/x-qt-styled-widget,而另外一種則無需固定,可以是除了前面的兩種以外任意其它Mime類型。

前一種相對來說開發(fā)起來比較容易,只需重新實(shí)現(xiàn)

  1. QObject * QWebPage::createPlugin ( const QString & classid, const QUrl & url, const QStringList & paramNames, const QStringList &paramValues )  

這個函數(shù)即可,這個函數(shù)會把HTML文件中的參數(shù)都傳遞進(jìn)來

下面是一個例子:

  1. class PluginPage : public QWContainer(wid2, wid3)ebPage   
  2. {   
  3. public:   
  4. PluginPage(QObject *parent = 0)   
  5.  
  6. : QWebPage(parent) {}   
  7. protected:   
  8. virtual QObject *createPlugin(const QString &classid, const QUrl &url,   
  9. const QStringList &paramNames,   
  10. const QStringList &paramValues)   
  11. {   
  12. QObject *result = 0;   
  13. if (classid == "pushbutton")   
  14. result = new QPushButton();   
  15. else if (classid == "lineedit")   
  16. result = new QLineEdit();   
  17. if (result)   
  18. result->setObjectName(classid);   
  19. //可以進(jìn)行一些處理   
  20. return result;   
  21. }   
  22. };  

這樣下面的網(wǎng)頁就可以一個pushbutton了:

  1. <html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>  

并且還可以在JavaScript訪問到QPushbutton,例如:

document.getElementById('mybutton').text將會返回按鈕上的字符串。

上面介紹的插件設(shè)計方式中雖然方便,但是其Mime類型只能是application/x-qt-plugin或者application/x-qt-styled-widget,這個有時候可能滿足不了實(shí)際應(yīng)用需求,那么另一種就沒有這種限制,那可以是任意Mime類型的。這種設(shè)計需要重新實(shí)現(xiàn)QWebPluginFactory這個純虛基類。先看看他的聲明:

前一節(jié)介紹的插件設(shè)計方式中雖然方便,但是其Mime類型只能是application/x-qt-plugin或者application/x-qt-styled-widget,這個有時候可能滿足不了實(shí)際應(yīng)用需求,那么另一種就沒有這種限制,那可以是任意Mime類型的。這種設(shè)計需要重新實(shí)現(xiàn)QWebPluginFactory這個純虛基類。先看看他的聲明:

  1. class QWEBKIT_EXPORT QWebPluginFactory : public QObject {   
  2. ……   
  3. public:   
  4. struct Plugin {   
  5. QString name;   
  6. QString description;   
  7. QList<MimeType> mimeTypes;   
  8. };   
  9. explicit QWebPluginFactory(QObject* parent = 0);   
  10. virtual ~QWebPluginFactory();   
  11. virtual QList<Plugin> plugins() const = 0;   
  12. virtual void refreshPlugins();   
  13. virtual QObject *create(const QString& mimeType,   
  14. const QUrl&,   
  15. const QStringList& argumentNames,   
  16. const QStringList& argumentValues) const = 0;   
  17.  
  18. virtual bool extension(Extension extension, const ExtensionOption* option = 0, ExtensionReturn* output = 0);   
  19. virtual bool supportsExtension(Extension extension) const;   
  20. ……   
  21. };  

重點(diǎn)要實(shí)現(xiàn)的接口是plugins,用于獲取plugin的列表,用于webkit內(nèi)部判斷該mime類型是否被支持,如果可以支持,那么就會調(diào)用create來創(chuàng)建這個插件,而具體打開哪個文件以及參數(shù)都會傳遞進(jìn)來。

后兩個extension和supportsExtension接口暫時沒有發(fā)現(xiàn)有什么用處,暫不考慮。

因此重新實(shí)現(xiàn)的WebPluginFactory如下:

  1. class WebPluginFactory: public QWebPluginFactory   
  2. {   
  3.     public:   
  4.         WebPluginFactory(QObject *parent = 0);   
  5.         ~WebPluginFactory(){};   
  6.         QList<QWebPluginFactory::Plugin> plugins()const ;   
  7.         void refreshPlugins();   
  8.         QObject *create(const QString &mimeType,   
  9.                 const QUrl &url,   
  10.                 const QStringList &argumentNames,   
  11.                 const QStringList &argumentValues) const ;   
  12.         bool extension(QWebPluginFactory::Extension extension, const QWebPluginFactory::ExtensionOption 
  13. *option = 0, QWebPluginFactory::ExtensionReturn *output = 0);   
  14.         bool supportsExtension(QWebPluginFactory::Extension extension) const;   
  15.     private:   
  16.         // 用于將載入的插件記錄下來   
  17.         mutable QList<QList<QWebPluginFactory::Plugin> > pluginslist;   
  18.         mutable QList<WebKitPluginInteface *> interfaces;   
  19. };  

具體實(shí)現(xiàn)主要是create和plugins兩個函數(shù):

  1. QList<QWebPluginFactory::Plugin> WebPluginFactory::plugins() const   
  2. {   
  3.     const char * s=getenv("BROWSER_PLUGIN_DIR");   
  4.     static bool isFirst=true;   
  5.     if(!isFirst)   
  6.     {   
  7.         return pluginslist;   
  8.     }   
  9.     isFirst=false;   
  10.     QString spath;   
  11.     if(s)   
  12.     sspath=s;   
  13.     else   
  14. {   
  15. spath=".";   
  16. }   
  17.     QDir dir(spath);   
  18.     QStringList filters;   
  19.     QString abspath=dir.absolutePath();   
  20. filters<<"libqtweb*.so"; //查找下面的擴(kuò)張,linux下是so,windows下則應(yīng)該是dll,   
  21.     QStringList files=dir.entryList(filters);   
  22.     foreach(QString file,files)   
  23.     {   
  24.         file=dir.filePath(file);   
  25.         QPluginLoader loader(file,0);   
  26.         QObject * objloader.instance();   
  27. //下面是載入自定義的接口,只有這樣才能支持動態(tài)插件創(chuàng)建,如果固定死了,將不利于擴(kuò)展,后一節(jié)會介紹這部分內(nèi)容   
  28.         WebKitPluginInteface * interfaceqobject_cast<WebKitPluginInteface*> (obj);   
  29.         if(interface==0)   
  30.         {   
  31.             //ignore error when loading so ;   
  32.             continue;   
  33.         }   
  34.         interface->plugins();   
  35.         plugins.append(interface->plugins());   
  36.         pluginslist.append(interface->plugins());   
  37.         interfaces.append(interface);   
  38.     }   
  39.     return plugins;   
  40. }   
  41.  
  42. void WebPluginFactory::refreshPlugins()   
  43. {   
  44.     Reload();   
  45. }   
  46.  
  47. QObject * WebPluginFactory::create(const QString &mimeType,   
  48.         const QUrl &url,   
  49.         const QStringList &argumentNames,   
  50.         const QStringList &argumentValues) const   
  51. {   
  52.     for(int i=0;i<pluginslist.size();i++)   
  53.     {   
  54.         for( int j=0;j< pluginslist[i].size();j++)   
  55.         {   
  56.             foreach(WebPluginFactory::MimeType mt, pluginslist[i][j].mimeTypes)   
  57.             {   
  58.                 if(mt.name == mimeType) //查找到,創(chuàng)建實(shí)例   
  59.                     return interfaces[i]->create( mimeType, url, argumentNames, argumentValues);   
  60.             }   
  61.         }   
  62.     }   
  63.     return NULL; //如果沒有,直接返回NULL,webkit會進(jìn)行處理的   
  64. }  

這兩個最主要的接口都是圍繞著mimetype進(jìn)行的,通過返回的列表告訴webkit插件支持什么類型的文件,而create則根據(jù)mimetype來識別文件類型,然后創(chuàng)建相應(yīng)的插件。

小結(jié):Qt Webkit瀏覽器插件設(shè)計的內(nèi)容介紹完了,希望通過Qt Webkit應(yīng)用內(nèi)容的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-08-29 14:19:48

QtWebkit瀏覽器

2011-08-29 14:27:33

QTWebkit瀏覽器

2010-07-21 15:06:33

2013-03-06 11:10:12

WebKit瀏覽器

2011-08-08 09:25:55

2013-10-31 14:31:09

2011-06-10 17:10:32

Qt GUI 瀏覽器

2009-11-11 13:00:05

GNOME瀏覽器Webkit內(nèi)核

2011-09-09 17:39:58

WebKit瀏覽器

2010-04-28 10:39:43

Webkit瀏覽器內(nèi)核

2011-06-10 16:44:17

Qt 瀏覽器

2013-11-22 09:58:36

2011-06-14 11:48:38

Webkit QT

2011-09-01 14:04:45

QT Webkit插件

2009-11-12 09:21:20

Chrome瀏覽器插件

2011-09-01 15:22:16

Qt WebKitWebKit

2009-06-22 14:06:00

java瀏覽器

2013-02-18 10:39:53

OperaWebkit瀏覽器

2010-01-21 09:02:51

搜狗瀏覽器Webkit

2012-03-20 11:07:08

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

老鸭窝毛片一区二区三区| 精品国产亚洲日本| 国产精品萝li| 3d动漫啪啪精品一区二区免费 | 欧美日韩国产成人在线| 制服丝袜第一页在线观看| 夜色77av精品影院| 林ゆな中文字幕一区二区| 亚洲第一搞黄网站| 欧美二区在线| 国产绿帽一区二区三区| 99成人免费视频| 宅男噜噜噜66一区二区| 在线a欧美视频| 亚洲911精品成人18网站| 中文在线аv在线| 亚洲欧美二区三区| 欧美一区二区三区电影在线观看| 国产a级免费视频| 久久久夜夜夜| 久久久久在线观看| 少妇无套高潮一二三区| 亚洲精品一区二区三区中文字幕| 色一区在线观看| 50度灰在线观看| 国产三级视频在线看| 国产·精品毛片| 国产日韩欧美日韩大片| 69成人免费视频| 午夜精品国产| 色偷偷噜噜噜亚洲男人| 久久久久久九九九九九| 91九色鹿精品国产综合久久香蕉| 欧美无砖专区一中文字| 成人在线免费观看av| 人人澡人人添人人爽一区二区| 国产欧美日韩激情| 久久综合中文色婷婷| 精品黑人一区二区三区国语馆| 久久婷婷一区| 97成人精品视频在线观看| 免费毛片在线播放免费| 国产精品久久久久久麻豆一区软件 | 一区二区三区四区五区精品视频| 久久精品最新地址| 日本美女xxx| 国产日产精品一区二区三区四区的观看方式 | 色偷偷偷综合中文字幕;dd| 日韩精品人妻中文字幕有码 | 国产精品一区二区三区四区五区 | 我爱我色成人网| 精品久久中文字幕久久av| 国产手机免费视频| 超碰97国产精品人人cao| 亚洲精品乱码久久久久久日本蜜臀| 亚洲一区二区免费视频软件合集| 国产黄在线播放| 国产亲近乱来精品视频| 亚洲国产欧美一区二区三区不卡| 成人欧美亚洲| 国产精品女上位| 一本久道久久综合狠狠爱亚洲精品 | 麻豆精品蜜桃视频网站| 国产精品视频在线观看| 中文字幕在线观看高清| 久久99国产乱子伦精品免费| 国产综合视频在线观看| 97人妻精品一区二区三区动漫| 久久国产人妖系列| 亚洲一区二区三区香蕉| 成 人 免费 黄 色| 国产成人无遮挡在线视频| 91在线播放视频| 日本黄视频在线观看| 26uuu精品一区二区| 日韩精品另类天天更新| 久草免费在线| 亚洲成a人片综合在线| 国产乱子伦农村叉叉叉| 欧美日韩国产网站| 91精选在线观看| 亚洲欧美高清在线| 国产欧美日韩精品高清二区综合区| 中文字幕9999| 精品97人妻无码中文永久在线| 亚洲天堂偷拍| 日本免费在线精品| 一级片视频播放| 高清shemale亚洲人妖| 精品一区日韩成人| 97超碰人人在线| 一区二区不卡在线播放 | 久草资源在线视频| 麻豆久久婷婷| 91九色在线视频| 无码精品人妻一区二区| 国产精品激情偷乱一区二区∴| 99国产精品白浆在线观看免费| 中文字幕人成乱码在线观看| 欧美亚洲尤物久久| 黄色av电影网站| 欧美久久精品一级c片| 欧美理论片在线观看| 男人天堂2024| 国产精品资源在线看| 久久免费一区| 任你弄在线视频免费观看| 欧美色图一区二区三区| 麻豆精品国产传媒av| 午夜精品毛片| 国产成人涩涩涩视频在线观看 | 99精品欧美一区| 三年中国中文在线观看免费播放| 男人天堂视频在线观看| 欧美一区二区三区在线看| 一本色道久久综合亚洲精品图片| 欧美激情第二页| 国产精品一二三在线| 无码国产精品一区二区色情男同| 亚洲天堂av老司机| 欧美大尺度做爰床戏| 欧美激情极品| 欧美激情综合亚洲一二区| 一道本无吗一区| 国产清纯在线一区二区www| 无码专区aaaaaa免费视频| 国产一区 二区| 日韩小视频网址| 国产一级精品毛片| 久久综合一区二区| 国产日产欧美视频| 国产欧美三级电影| 欧美精品999| 99久久久久久久| 亚洲欧洲日产国码二区| 久久撸在线视频| 不卡视频在线| 国产精品高潮呻吟久久av野狼| 日韩在线视频观看免费| 亚洲一区av在线| av免费观看不卡| 激情av一区| 国产精品免费一区二区三区| 日本色护士高潮视频在线观看| 538在线一区二区精品国产| 国产美女网站视频| 奇米一区二区三区| 婷婷五月色综合| 亚洲电影有码| 最近2019中文字幕mv免费看 | 99久久精品情趣| 老太脱裤子让老头玩xxxxx| 狼人精品一区二区三区在线| 91精品国产99久久久久久| 日韩中文字幕免费观看| 亚洲3atv精品一区二区三区| 国产精品无码电影| 亚洲免费婷婷| 日本午夜精品电影| 麻豆久久久久| 久久精品视频播放| 午夜精品久久久久久久96蜜桃| 亚洲资源中文字幕| 波多野结衣先锋影音| 免费日韩av片| 偷拍视频一区二区| 久久久精品区| 久久青草福利网站| 国产在线黄色| 在线不卡免费欧美| 国产精品成人aaaa在线| 久久―日本道色综合久久| 黄色成人免费看| 天天射天天综合网| 国产二区不卡| 日韩新的三级电影| 久久亚洲国产精品| 日日夜夜精品免费| 欧美日免费三级在线| 欧美色图一区二区| 91毛片在线观看| 污污网站免费看| 国产一区观看| 日本一区二区高清视频| 亚洲18在线| 97人人模人人爽人人喊中文字 | 欧美成人精品h版在线观看| 日韩专区第一页| 欧美日韩一区二区欧美激情| 欧美三根一起进三p| aaa亚洲精品一二三区| 蜜臀av免费观看| 亚洲无线一线二线三线区别av| 久久久久久久免费| **精品中文字幕一区二区三区| 午夜精品久久久久久久白皮肤 | 日夜干在线视频| 欧美日产国产精品| 久久青青草视频| 亚洲视频在线观看一区| 日韩精品卡通动漫网站| 激情另类小说区图片区视频区| 激情伊人五月天| 亚洲理论电影网| 日韩精品国内| 日韩av资源网| 亚洲影院色在线观看免费| 色老太综合网| 91精品国产成人www| av色综合久久天堂av色综合在| 亚洲人成在线观| 日本高清视频网站| 欧美一级电影网站| 中文字幕91爱爱| 日韩欧美中文在线| 久久精品国产亚洲av麻豆色欲| 亚洲国产精品99久久久久久久久 | 国产欧美精品一区aⅴ影院 | 性欧美xxxx交| 大片免费在线观看| 在线精品国产成人综合| 日韩a级作爱片一二三区免费观看| 欧美一级在线视频| 亚洲一二区视频| 91久久国产综合久久| 日本一区二区不卡在线| 亚洲精品国产精华液| 婷婷社区五月天| 欧美国产一区在线| 亚洲av综合一区二区| youjizz国产精品| 白丝校花扒腿让我c| 国产麻豆一精品一av一免费| 一级片视频免费观看| 日韩在线卡一卡二| 国产精品亚洲αv天堂无码| 一本久道久久久| 给我免费播放片在线观看| 激情亚洲成人| 成人网站免费观看入口| 亚洲大胆在线| 欧美不卡在线播放| 男人的天堂亚洲在线| 国产a级一级片| 久久精品官网| 日本www.色| 美女一区二区视频| 中文av字幕在线观看| 狠狠狠色丁香婷婷综合久久五月| www.日本xxxx| 免费成人在线网站| 91高清国产视频| 精品一二线国产| 中文 日韩 欧美| 国产老肥熟一区二区三区| 成人三级做爰av| 成人免费视频播放| 中文字幕在线观看的网站| 91亚洲永久精品| 最近中文字幕在线mv视频在线 | 欧美xxxx网站| 91视频九色网站| 粉嫩久久久久久久极品| 久久精品第九区免费观看 | 精品自拍视频| 91中文在线视频| 丁香综合av| 日本视频一区二区在线观看| 欧美一区二区麻豆红桃视频| 伊人色综合久久天天五月婷| 亚洲欧美色图| 自拍日韩亚洲一区在线| 日韩电影在线观看网站| 亚洲理论中文字幕| 91在线精品一区二区| 久久久久久久毛片| 亚洲激情五月婷婷| 中文字幕视频网| 欧美精品一卡两卡| 日本激情视频网站| 色婷婷综合成人av| 999av小视频在线| 国产精品视频精品视频| 一区二区三区在线资源| 欧美福利精品| 亚洲经典一区| 日韩亚洲在线视频| 国产精品一区专区| 大又大又粗又硬又爽少妇毛片 | 亚洲一区有码| 国产日韩精品推荐| 日韩免费久久| 黄色一级视频片| 狠狠色丁香婷综合久久| 久久人人爽人人爽人人片| 1024成人网| 无码人妻av免费一区二区三区| 欧美一区二区私人影院日本| 可以免费看污视频的网站在线| 久久天天躁日日躁| 欧美7777| 国产一区自拍视频| 天天做综合网| 老司机午夜av| 成人精品视频一区| 精品无码一区二区三区蜜臀| 色综合天天狠狠| 后入内射欧美99二区视频| 中文字幕精品一区久久久久| cao在线视频| 91啪国产在线| 成人aaaa| 国产精品免费成人| 成人激情校园春色| 18岁成人毛片| 7799精品视频| 在线看av的网址| 日本亚洲欧美成人| 精品欧美午夜寂寞影院| 国产激情片在线观看| 久久精品国产久精国产爱| 性少妇bbw张开| 婷婷亚洲久悠悠色悠在线播放| 99产精品成人啪免费网站| 中文字幕亚洲欧美一区二区三区| 在线观看特色大片免费视频| 国产精品视频在线免费观看 | 精品毛片在线观看| 中文字幕精品在线视频| 亚洲不卡系列| 日韩精彩视频| 日韩av一二三| 中文幕无线码中文字蜜桃| 午夜不卡在线视频| 黄色成人一级片| 久久久久久伊人| 91欧美日韩在线| 国产真人做爰毛片视频直播| 国产成人精品亚洲午夜麻豆| www青青草原| 日韩精品中文字幕在线一区| av在线免费播放| 99re视频在线| 亚洲手机视频| 自拍视频一区二区| 欧美午夜激情视频| 视频一区二区在线播放| 2021国产精品视频| 最近国产精品视频| 动漫av免费观看| 国产欧美1区2区3区| 黄色一区二区视频| 日韩中文字幕在线免费观看| 欧美综合社区国产| 在线视频一二三区| 国产成人免费视频| 日韩欧美不卡视频| 亚洲免费电影一区| 成人免费视频观看| 亚洲成人动漫在线| www.av亚洲| 波多野结衣电车| 日韩亚洲精品视频| 日韩精品一区二区三区中文字幕 | 国产精品suv一区二区88| 91精品婷婷国产综合久久竹菊| 呦呦在线视频| 九九九九九九精品| 日韩精品一级中文字幕精品视频免费观看| 国产在线综合视频| 91精品黄色片免费大全| 国产美女情趣调教h一区二区| 国内精品一区二区| 日韩成人精品在线观看| 亚洲天堂网av在线| 亚洲国产欧美一区二区三区同亚洲| 特黄毛片在线观看| 在线观看免费91| 成人免费观看男女羞羞视频| 日本a级c片免费看三区| 日韩在线免费视频| 国产suv精品一区二区四区视频| 免费欧美一级视频| 中文字幕在线一区免费| 亚洲免费黄色片| 国产精品91久久久| 欧美久久九九| av网站免费在线看| 日韩精品中文字幕在线一区| 三上悠亚国产精品一区二区三区| 国产成人免费高清视频| 91视频免费播放| 国产精品系列视频| 欧美又大又硬又粗bbbbb| 国产精品久久久久一区二区三区厕所| 午夜影院福利社| 欧美日韩国产精选| 乡村艳史在线观看| 日本久久久网站| 亚洲欧洲av色图|