火狐拡張開発:ブックマーク機能を追加するパッケージ


ここ数日、火狐ブラウザにブックマークを追加する機能を書く必要があります.指定したブックマークフォルダにフォルダとウェブサイトを追加し、いくつかのオリジナルの方法をカプセル化する必要があります.
 
参考資料:
 1. XPCOM nsINavBookmarkObserver(火狐オープンブックマークインタフェース)2.XPCOM nsINavBookmarksService(火狐オープンブックマークインタフェース)
 3. Code Snippets Bookmarks(公式例)
 
 
第一歩:firefoxのBookmark APIの定数を導入する.
var bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
    .getService(Components.interfaces.nsINavBookmarksService);
var htService = Components.classes["@mozilla.org/browser/nav-history-service;1"].
    getService(Components.interfaces.nsINavHistoryService);
var ioService = Components.classes["@mozilla.org/network/io-service;1"]
    .getService(Components.interfaces.nsIIOService);

var menuFolder = bmsvc.bookmarksMenuFolder; //        
var toolbarFolder = bmsvc.toolbarFolder; //         

 
 
ステップ2:ルートブックマークツールバーのルートディレクトリにブックマークを追加します.
function addUrl(name, url) {
   var uri = ioService.newURI(url, null, null);
   if (!bmsvc.isBookmarked(uri)) {//        
        bmsvc.insertBookmark(bmsvc.toolbarFolder, uri,bmsvc.DEFAULT_INDEX, name);//    
  }
}
 
 
 
ステップ3:指定したディレクトリにブックマークフォルダを追加します.
function addFolderUrl(folderType, folderName) {
 var query = htService.getNewQuery();
 var options = htService.getNewQueryOptions();
 query.setFolders([toolbarFolder], 1);
 var result = htService.executeQuery(query, options);
 var rootNode = result.root;
 var childFolder = 0;
 rootNode.containerOpen = true;
 //           
 for (var i = 0; i < rootNode.childCount; i++) {
  var node = rootNode.getChild(i);
  if (node.type == node.RESULT_TYPE_FOLDER && node.title == folderName) {
      childFolder = node.itemId;
 //     
      var newFolderId = bmsvc.createFolder(folderType, folderName, bmsvc.DEFAULT_INDEX);
      break;
     }
 }
  rootNode.containerOpen = false;
};
 
 
ステップ4:指定したurlのブックマークを削除します.
function remove(url){
        var uri = ioService.newURI(url, null, null);
        var bookmarksArray = bmsvc.getBookmarkIdsForURI(uri, {});
        bmsvc.removeItem(bookmarksArray);
    },