--- title: Accessing Bookmarks slug: Places/Accessing_Bookmarks tags: - Firefox 3 - Places translation_of: Mozilla/Tech/Places/Manipulating_bookmarks_using_Places ---
이 문서는 북마크 트리의 일부를 빠르게 구하기를 원하는 사람들을 위한 빠른 시작을 제공합니다. 북마크는 플레이스 질의 시스템을 이용하여 구할 수 있으며, 이는 더 일반적인 정보를 담고 있습니다. 북마크 서비스 API에 대해서는 북마크 서비스를 참고하시기 바랍니다.
모든 질의는 히스토리 서비스를 통해 실행합니다. 먼저 히스토리 서비스에서 빈 질의와 옵션 개체를 얻어야 합니다.
var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"] .getService(Components.interfaces.nsINavHistoryService); var options = historyService.getNewQueryOptions(); var query = historyService.getNewQuery();
알려진 폴더 ID는 북마크 서비스에서 구할 수 있습니다. /toolkit/components/places/public/nsINavBookmarksService.idl
에 정의된 속성은 bookmarksMenuFolder
, tagsFolder
, unfiledBookmarksFolder
, toolbarFolder
입니다. 이전 질의에서 폴더 ID를 얻을 수도 있습니다.
이 예제는 북마크 도구 막대의 ID를 얻는 것입니다.
var bookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"] .getService(Components.interfaces.nsINavBookmarksService); var toolbarFolder = bookmarksService.toolbarFolder;
placesRoot
는 전체 플레이스 계층 구조의 최상위 폴더입니다. 이는 사용자 데이터 뿐만 아니라 관리 데이터를 포함하고 있어서 질의에 사용하는 것은 바람직하지 않습니다.
전체 북마크 트리를 원하면 그룹화 옵션 GROUP_BY_FOLDER
을 사용해야 합니다. 현재, 질의 시스템은 이 플래그가 필요하지 않으며 정확하게 한 폴더의 내용을 요청하면 항상 계층 구조를 반환합니다. 이는 bug 331487입니다. 버그가 수정되면 GROUP_BY_FOLDER
이 없는 북마크 질의는 모든 폴더와 서브폴더에서 질의에 부합하는 모든 북마크의 단순 목록을 반환할 것입니다.
통상의 북마크 질의에서 여러분은 하나의 최상위 폴더를 갖습니다. 질의 개체에서 이 폴더는 setFolders
에 주어집니다.
options.setGroupingMode([options.GROUP_BY_FOLDER],1); query.setFolders([toolbarFolder], 1);
executeQuery
및 executeQueries
함수는 질의 결과를 포함한 nsINavHistoryResult
개체를 반환합니다.
var result = historyService.executeQuery(query, options);
(예제와 같이) 키워드나 날짜 범위와 같은 고급 매개 변수가 없이 폴더로 분류된 딱 하나의 폴더를 질의할 때, 결과의 root
는 폴더에 해당하는 nsINavHistoryContainerResultNode
가 됩니다. 질의가 복잡하거나 GROUP_BY_FOLDER
를 사용하지 않았다면 루트는 nsINavHistoryQueryResultNode
가 됩니다.
결과 콘테이너의 자식을 접근하기 전에 먼저 그것을 열고 나서 자식을 탐색할 수 있습니다. 콘테이너가 열려 있는 동안 북마크 시스템의 공지를 듣고 자신을 최신 상태로 유지하게 됩니다. 작업을 마치면 꼭 콘테이너를 닫아 자원을 해제하십시오. 그렇지 않으면 콘테이너는 계속 알림을 받고 자신을 갱신하여 전체 브라우저를 느리게 합니다.
var rootNode = result.root; rootNode.containerOpen = true; // iterate over the immediate children of this folder and dump to console for (var i = 0; i < rootNode.childCount; i ++) { var node = rootNode.getChild(i); dump("Child: " + node.title + "\n"); } // close a container after using it! rootNode.containerOpen = false;
RESULT_TYPE_FOLDER
형식이나 다른 형식의 노드를 만나면 이 폴더를 열고 계층 구조의 아래로 내려갈 수 있습니다. 여러 가지 결과 형식을 이해하려면 플레이스:질의 시스템의 "결과 이용하기" 섹션을 참고하시기 바랍니다.
var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"] .getService(Components.interfaces.nsINavHistoryService); var options = historyService.getNewQueryOptions(); var query = historyService.getNewQuery(); var bookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"] .getService(Components.interfaces.nsINavBookmarksService); var toolbarFolder = bookmarksService.toolbarFolder; //comment out the next line for now; the bug hasn't been fixed; final version should include the next line options.setGroupingMode([options.GROUP_BY_FOLDER],1); query.setFolders([toolbarFolder], 1); var result = historyService.executeQuery(query, options); var rootNode = result.root; rootNode.containerOpen = true; // iterate over the immediate children of this folder and dump to console for (var i = 0; i < rootNode.childCount; i ++) { var node = rootNode.getChild(i); dump("Child: " + node.title + "\n"); } // close a container after using it! rootNode.containerOpen = false;