中編から引き続き、
その前に、
Places API
ここからは、
ご存知の通りFirefox 3ではブックマークと履歴の管理機能が一新されましたが、
XPCOMサービス | 概要 |
---|---|
nsINavBookmarksService | ブックマークの追加、 ・ ・ |
nsITaggingService | ブックマークへのタグ付け、 ・ ・ |
表1に挙げた以外にも様々なAPIが存在します。詳しくは下記URLをご覧ください。
ブックマーク済みかどうかのチェック
ここからは、
var TagHelper = {
generateTags: function() {
var url = window.content.location.href;
var ioSvc = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
url = ioSvc.newURI(url, null, null);
var bookmarksSvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
getService(Ci.nsINavBookmarksService);
if (!bookmarksSvc.isBookmarked(url)) {
alert('"' + window.content.document.title + '" is not bookmarked.');
return;
}
var keywords = [];
var sel = window.content.getSelection();
for (var i = 0; i < sel.rangeCount; i++) {
var keyword = sel.getRangeAt(i).toString();
keyword = keyword.replace(/^\s+|\s+$/g, "");
keywords.push(keyword);
}
Application.console.log("keywords = " + keywords);
sel.removeAllRanges();
},
};
あるURLがブックマーク済みかどうかを調べるには、
なお、
ブックマークへのタグ付け
ここからは、
var TagHelper = {
generateTags: function() {
var url = window.content.location.href;
var ioSvc = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
url = ioSvc.newURI(url, null, null);
var bookmarksSvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
getService(Ci.nsINavBookmarksService);
if (!bookmarksSvc.isBookmarked(url)) {
alert('"' + window.content.document.title + '" is not bookmarked.');
return;
}
var keywords = [];
var sel = window.content.getSelection();
for (var i = 0; i < sel.rangeCount; i++) {
var keyword = sel.getRangeAt(i).toString();
keyword = keyword.replace(/^\s+|\s+$/g, "");
keywords.push(keyword);
}
Application.console.log("keywords = " + keywords);
if (keywords.length > 0) {
var taggingSvc = Cc["@mozilla.org/browser/tagging-service;1"].
getService(Ci.nsITaggingService);
taggingSvc.tagURI(url, keywords);
}
sel.removeAllRanges();
},
};
ブックマークに対してタグ付けするには、
JavaScriptコードモジュールを利用する
JavaScriptコードモジュールとは、
もちろん拡張機能が独自にJavaScriptコードモジュールを定義することもできますが、
Components.utils.import("resource://gre/modules/utils.js");
ただし、
JavaScriptコードモジュールは、
「PlacesUtils」
プロパティ | 詳細 |
---|---|
PlacesUtils. | nsINavBookmarksServiceへの参照。 |
PlacesUtils. | nsITaggingServiceへの参照。 |
PlacesUtils._uri | nsIIOServiceでURL文字列からnsIURIオブジェクトを生成する |
var TagHelper = {
generateTags: function() {
var url = window.content.location.href;
url = PlacesUtils._uri(url);
if (!PlacesUtils.bookmarks.isBookmarked(url)) {
alert('"' + window.content.document.title + '" is not bookmarked.');
return;
}
var keywords = [];
var sel = window.content.getSelection();
for (var i = 0; i < sel.rangeCount; i++) {
var keyword = sel.getRangeAt(i).toString();
keyword = keyword.replace(/^\s+|\s+$/g, "");
keywords.push(keyword);
}
Application.console.log("keywords = " + keywords);
if (keywords.length > 0) {
PlacesUtils.tagging.tagURI(url, keywords);
}
sel.removeAllRanges();
},
};
右クリックメニュー項目の表示制御
ここからは、
var TagHelper = {
init: function() {
var contextMenu = document.getElementById("contentAreaContextMenu");
contextMenu.addEventListener("popupshowing", this, false);
},
destroy: function() {
var contextMenu = document.getElementById("contentAreaContextMenu");
contextMenu.removeEventListener("popupshowing", this, false);
},
generateTags: function() {
var url = window.content.location.href;
url = PlacesUtils._uri(url);
if (!PlacesUtils.bookmarks.isBookmarked(url)) {
alert('"' + window.content.document.title + '" is not bookmarked.');
return;
}
var keywords = [];
var sel = window.content.getSelection();
for (var i = 0; i 0) {
PlacesUtils.tagging.tagURI(url, keywords);
}
sel.removeAllRanges();
},
handleEvent: function(event) {
if (event.type == "popupshowing") {
var selected = getBrowserSelection() != "";
document.getElementById("taghelper-menu").hidden = !selected;
}
}
};
window.addEventListener("load", function() { TagHelper.init(); }, false);
window.addEventListener("unload", function() { TagHelper.destroy(); }, false);
リスト5の最後の2行は、
- ブラウザウィンドウを開いた直後
(「browser. xul」 ロード完了に伴う 「load」 イベント発生時) に 「TagHelper. init」 を実行する。 - ブラウザウィンドウを閉じた直後
(「browser. xul」 アンロード完了に伴う 「unload」 イベント発生時) に 「TagHelper. destroy」 を実行する。
「TagHelper.
動作確認
ここまでのソースコード記述が完了したら、
- ブックマークされていないWebページ上で範囲を選択し、
右クリックから 「Generate Tags from Selection」 メニュー項目を選択すると、 警告メッセージが表示される。 - ブックマーク済みのWebページ上で範囲を選択し、
右クリックから 「Generate Tags from Selection」 メニュー項目を選択すると、 選択範囲の文字列からタグ付けされる。 - 範囲を選択していない状態で右クリックすると、
メニュー項目 「Generate Tags from Selection」 が非表示となる。
まとめと次回の予告
中編・
- FUEL
- Places API
- JavaScriptコードモジュール
ブックマークや履歴に関する拡張機能を開発するのであれば、
次回はタグヘルパーへlocaleパッケージを追加して拡張機能のUIをローカライズ可能にします。