既に大きくなっているオープンソースを見るときに、
その始まりというものがつかめず、難しく感じるのだが、Qtをやってみて、
WebKitの中身(というか、QtがラップしたWebKitというべきだろうか?)を見るきっかけができた。

独自スキーマを実現するにはどうすればいいか?
この観点で、WebKitのソースをみてみる。

独自スキーマとは、
http:// みたいなものではなく、
myres://
とか、
epub3://
とか、勝手にこちらで定義したもので、標準ではないものです。

ここで、ポイントがある。
1)独自スキーマ自体を認識するモデルはどうなっているのか?
2)独自スキーマから、実際にデータを取得するにはどうすればいいのか?
という事だ。

まだまだ、ソースレベルで実装までに至っていないので、
不完全かもしれないが、わかったレベルで記述することにする。

まず、QtにおけるWebKitの構成は、
QWebView
QWebPage
が大きな要素だ。

Viewは見た目の容器であり、そのモデルの実体はQWebPageだととらえてもらってもいい。
なので、QWebViewには、setPage()でQWebPageのインスタンスを設定する。

単に、WebKitをWEBブラウザコンポーネントとしてしか使わないのであれば、ここまで見る必要はないが、
今回は、その中で表示するモデル(リソース)を拡張することにあるので、QWebPageまで話が及ぶ。

QWebPageというクラスを見てみると、2つのメソッドが関連していることがわかった。
1)acceptNavigationRequestというprotectedのメソッド
2)setNetworkAccessManagerというメソッド

1は、クリックされたときなどに、どのように処理をするかの定義を変えられるようだ。
つまり、自分自身が受け持っていいのか?それとも外部委譲なのか?
なので、リンクをクリックされたときに他のアプリを起動するなどのような場合に使える。
このときに、引数のrequestからスキーマをとって、それがmswordだったら、Wordを立ち上げて、ファイルを表示するなんてことも可能なはずだ。
自分でスキーマを作った場合に、既存のQWebPageではなく、完全に自分でtrueなのかfalseなのかを制御する必要があるので、
QWebPageを継承したクラスを作成する必要があるだろう。

2)は、実際にデータをどこから持ってくればいいのか?
ということを管理している。ここに気がついたのは、実はQtが独自のqrc://というリソース管理をしているようなので、
それをqtのソースすべてから調べて(といってもgrepしただけ)、qrcというスキーマを扱っているクラスが、
NetworkAccessManagerというクラスのようなので、わかった。

つまり、こちらもそのソースを参考に、自分で定義したスキーマに従い実際にデータを取得するコードを書けばよい。

と、ここまではわかった。
まだ、冒頭でも述べたが、まだ実際にコードを書いてみて確認はしていないので、
間違ったところや、足りない部分があるかもしれないので、あしからず・・・・

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2012年6月
« 5月   7月 »
 123
45678910
11121314151617
18192021222324
252627282930  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ