精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

91久久在线播放| 亚洲美女性生活视频| 国产成人三级视频| 亚洲精品一级片| 香蕉久久久久久久av网站| 国产亚洲欧洲高清| wwwxxx色| 四虎影视4hu4虎成人| 亚洲品质自拍视频网站| 久久精品中文字幕一区二区三区| 波多野结衣视频在线看| 中文字幕午夜精品一区二区三区| 精品国产百合女同互慰| 国产熟人av一二三区| 色噜噜狠狠狠综合欧洲色8| 久久综合九色综合97_久久久| 国产精品中文久久久久久久| 日韩 国产 在线| 先锋资源久久| 亚洲日本中文字幕免费在线不卡| 久久久福利影院| 9999在线视频| 亚洲欧美电影院| 视频一区免费观看| 无码国产精品96久久久久| 精品无人码麻豆乱码1区2区| 2019中文字幕全在线观看| chinese全程对白| 欧美猛男男男激情videos| 欧美tk丨vk视频| 第一区免费在线观看| 成人性生活视频| 亚洲高清视频的网址| 国产对白在线播放| 91激情在线| 国产色一区二区| 久久亚洲国产精品日日av夜夜| 国产喷水福利在线视频| 男男成人高潮片免费网站| 欧美又大粗又爽又黄大片视频| 久久亚洲AV无码| 欧美福利一区| 久久久精品视频在线观看| 国产三级在线观看完整版| 美女久久久久| 精品中文字幕久久久久久| 无码人妻精品一区二区三| 自拍偷拍欧美日韩| 欧美美女直播网站| 性生活免费在线观看| 欧美日一区二区三区| 欧美日韩综合视频| 干日本少妇首页| 惠美惠精品网| 欧美主播一区二区三区| 好吊妞无缓冲视频观看| av在线麻豆| 亚洲自拍偷拍综合| 香蕉久久夜色| 麻豆传媒在线观看| 久久嫩草精品久久久精品| 蜜桃久久影院| 精品电影在线| 成人av第一页| 成人黄色免费网站在线观看| 伊人网站在线观看| 久久国产精品第一页| 91九色精品视频| 亚洲国产精品无码久久| 成人h精品动漫一区二区三区| 国产三区二区一区久久| 五月天福利视频| 国产欧美一区二区在线| 亚洲乱码一区二区三区| 国产原创视频在线观看| 亚洲一区在线电影| 日本中文字幕网址| 成人免费网站www网站高清| 欧美日韩国产综合草草| 日本少妇激三级做爰在线| 中文字幕日韩高清在线| 日韩成人在线网站| 黄色三级生活片| 欧美粗暴jizz性欧美20| 91成人在线播放| 在线免费看毛片| 成人免费毛片嘿嘿连载视频| 女人一区二区三区| 国产区在线看| 精品免费在线视频| 婷婷六月天在线| 9l亚洲国产成人精品一区二三| 日韩毛片在线观看| 国产大屁股喷水视频在线观看| 欧美黄污视频| 国产成人aa精品一区在线播放| 国产一区二区女内射| 国产成人h网站| 欧美一区二区高清在线观看| 欧美18一19xxx性| 午夜精品aaa| 伊人网在线综合| 美女午夜精品| 久久久精品一区二区三区| 日本少妇吞精囗交| 久久国产麻豆精品| 欧美激情一区二区三区在线视频| 色综合久久久久综合一本到桃花网| 亚洲黄色片在线观看| 亚洲中文字幕无码不卡电影| 成人噜噜噜噜| 国产一区二区美女视频| 久久久综合久久| 老司机免费视频一区二区三区| 国产日韩亚洲精品| 最新黄网在线观看| 欧美视频一区二区| 少妇精品一区二区三区| 欧美精品一级| 成人黄色短视频在线观看| 色呦呦免费观看| 亚洲欧美日韩中文播放| 男女无套免费视频网站动漫| 中文一区二区三区四区| 久久亚洲精品中文字幕冲田杏梨| 中文字幕69页| 成人国产亚洲欧美成人综合网| 在线国产伦理一区| 欧美aaa大片视频一二区| 亚洲国产欧美一区二区丝袜黑人 | 国内偷自视频区视频综合| 一本久道久久综合无码中文| 久久人人97超碰com| 成人网站免费观看入口| 日韩精品视频一区二区三区| 色偷偷噜噜噜亚洲男人| 中文区中文字幕免费看| 久久精品免视看| 亚洲中文字幕无码不卡电影| 国产亚洲精品美女久久| 欧美黑人巨大精品一区二区| a级片免费视频| 日韩美女视频一区二区 | 亚洲欧美色婷婷| 成人毛片18女人毛片| 99久久婷婷国产精品综合| 国产成人一区二区三区别| 国产999精品在线观看| 久久精品国产一区二区三区| 日本一区二区三区久久| 欧美激情一区二区三区在线| 国产福利一区视频| 欧洲福利电影| 国产精品自在线| 欧美人xxx| 日韩一区二区精品在线观看| 精品小视频在线观看| 高清在线观看日韩| 三上悠亚久久精品| 欧美高清视频看片在线观看| 久久久久久久久国产| 人妻少妇精品无码专区| 舔着乳尖日韩一区| 国产精品无码久久久久一区二区| 久久一本综合频道| 亚洲精品自在在线观看| 精品国产亚洲一区二区三区| 欧美裸体xxxx极品少妇| 国精产品乱码一区一区三区四区| 亚洲国产日韩在线一区模特| yy1111111| 久久精品亚洲一区二区| 亚洲ai欧洲av| 无码国模国产在线观看| 久久久久久国产精品美女| 香蕉视频网站在线| 欧美性受极品xxxx喷水| 久久爱一区二区| av影院午夜一区| 欧美日韩一区二区在线免费观看| 日韩一区欧美| 国产91精品一区二区绿帽| 人人草在线视频| 中文字幕亚洲激情| 成 人 免费 黄 色| 色欧美片视频在线观看在线视频| 999久久久国产| 国产成人精品免费在线| 久久久久久久激情| 91精品国产成人观看| 国产伦精品一区二区三| 日本h片久久| 操人视频在线观看欧美| 欧美中文在线| 欧美一二三在线| 成年人视频在线免费看| 亚洲视频一二三| 熟女俱乐部一区二区| 国产精品一二三四| 另类小说第一页| 伊人久久大香线蕉av超碰演员| 欧美精品在线一区| 欧美日韩黄色| 国产精品久久久久久久9999 | 欧美顶级大胆免费视频| 国产99午夜精品一区二区三区| 经典三级一区二区| 久久免费视频在线观看| 求av网址在线观看| 亚洲视频网站在线观看| 日韩在线一区二区三区四区| 欧美日韩精品一区二区天天拍小说| 日本少妇久久久| 玉米视频成人免费看| 天堂在线中文视频| 99精品热视频| 制服下的诱惑暮生| 久久精品国产亚洲一区二区三区| 午夜免费福利小电影| 欧美亚洲不卡| 麻豆传媒网站在线观看| 欧美日韩一区二区三区视频播放| 国内一区在线| 永久免费精品视频| 91亚洲国产成人久久精品网站| 三级成人黄色影院| 2018日韩中文字幕| 999av小视频在线| 欧美极品少妇xxxxx| 国产剧情在线| 在线观看精品自拍私拍| 欧美大片aaa| 精品亚洲永久免费精品| 少妇一区二区三区四区| 欧美r级电影在线观看| 国产熟女一区二区三区四区| 欧美日韩国产在线观看| 中文字幕免费高清网站| 91精品福利在线| 在线观看 亚洲| 欧美日韩激情视频8区| 国产精品成人久久| 亚洲二区在线视频| 国产午夜精品无码一区二区| 亚洲国产精品综合小说图片区| 深夜福利影院在线观看| 一区二区三区在线免费视频| 欧美视频www| 亚洲激情图片一区| 久久免费小视频| 亚洲成在人线免费| 午夜精品三级久久久有码| 午夜精品福利视频网站| 你懂的国产在线| 色呦呦网站一区| 国产精品无码粉嫩小泬| 欧美日韩一区三区| 国产绿帽刺激高潮对白| 日韩西西人体444www| 亚洲精品久久久久久动漫器材一区| 欧美一级免费观看| 亚洲国产日韩在线观看| 精品国产成人系列| 毛片在线免费| 视频一区视频二区国产精品| 黄网站在线免费| 欧美激情在线观看视频| 九九精品调教| 日韩美女毛茸茸| 国产91精品在线| 亚洲一区二区三区乱码aⅴ| 综合欧美亚洲| 欧美日韩一区二区三| 欧美日一区二区| av动漫在线免费观看| 99在线精品免费视频九九视| 国产情侣av自拍| 国产一区二区不卡| 亚洲制服丝袜在线播放| 亚洲国产精品av| 久一视频在线观看| 91黄色免费网站| 国产免费无遮挡| 亚洲精品电影在线观看| jizz在线免费观看| 欧美高清视频在线播放| 美女写真久久影院| 91精品国产99久久久久久红楼| 亚洲都市激情| 91精品一区二区三区四区| 一本久久综合| 蜜桃福利午夜精品一区| 懂色av一区二区三区免费观看| 国产麻豆xxxvideo实拍| 中文字幕一区二区视频| 日本一二三区视频| 欧美片在线播放| 日本一区高清| 色综合91久久精品中文字幕| 国产精品迅雷| 动漫美女被爆操久久久| 青青草成人影院| 中国丰满人妻videoshd| 国产一区二区在线观看视频| 亚洲国产无码精品| 怡红院av一区二区三区| 欧美视频xxxx| 日韩精品在线观看一区二区| 国产视频在线播放| 国产999精品| 欧美日韩导航| 成人小视频在线观看免费| 欧美96一区二区免费视频| a级一a一级在线观看| 亚洲欧美日韩国产一区二区三区| 国产视频1区2区| 亚洲国产精彩中文乱码av在线播放 | 松下纱荣子在线观看| 亚洲自拍欧美色图| 成人中文视频| 99久久久无码国产精品6| 成人一区二区三区视频在线观看| 成人黄色短视频| 色综合天天综合色综合av| 开心激情综合网| 久久夜色精品国产欧美乱| 99久久精品一区二区成人| 久久综合久久久| 最新国产拍偷乱拍精品| 亚洲成人激情小说| 日韩理论片中文av| 又骚又黄的视频| 一本色道久久88综合亚洲精品ⅰ | 超碰国产在线观看| 欧美一区二区色| 欧美自拍视频| 18岁网站在线观看| 不卡视频一二三| 国产污视频在线看| 亚洲精品一区二区三区影院 | 91精品国产福利在线观看麻豆| 国产一级特黄a大片免费| 久久先锋影音av鲁色资源网| 日本一区二区三区精品| 日韩国产精品一区| jizz内谢中国亚洲jizz| 欧美日韩一区二区三区免费| 久久高清国产| 欧美激情亚洲色图| 欧美日韩亚洲综合一区二区三区| 最新97超碰在线| 成人免费网站在线看| 亚洲不卡av不卡一区二区| 一级日本黄色片| 亚洲观看高清完整版在线观看| 日韩中文字幕观看| 日本亚洲欧洲色α| 成人在线电影在线观看视频| 国产一二三区av| 亚洲蜜臀av乱码久久精品| 国产黄色片网站| 国模精品系列视频| 妖精视频一区二区三区免费观看| 成人精品视频一区二区| 国产精品日产欧美久久久久| 97超碰人人草| 欧美激情按摩在线| 四虎5151久久欧美毛片| 欧美伦理视频在线观看| 中文字幕一区二区在线播放| 亚洲国产精品久久久久久6q| 69久久夜色精品国产7777| 国产日产一区| 亚洲图片 自拍偷拍| 亚欧色一区w666天堂| 欧美18xxxxx| 成人黄色短视频在线观看| 精品999日本| 精品亚洲aⅴ无码一区二区三区| 欧美一区二视频| 手机在线观看av网站| 亚洲视频sss| 高清不卡在线观看| 国产91精品看黄网站在线观看| 日韩三级影视基地| 久久精品亚洲成在人线av网址| 91香蕉视频污版| 一个色在线综合| 国产乱理伦片a级在线观看| 亚洲www视频| 久久午夜影视| 欧美黄片一区二区三区| 亚洲人av在线影院| 日韩精品一区国产| 欧美国产日韩在线播放| 亚洲综合激情网| av网站大全在线观看| 国产传媒一区| 精品一区二区av| 无码人妻熟妇av又粗又大|