「Places/ブックマークメニューへの項目の追加」の編集履歴(バックアップ)一覧はこちら

Places/ブックマークメニューへの項目の追加」(2014/11/03 (月) 22:39:29) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

#contents() *基本 #highlight(javascript){{ Cu.import("resource://gre/modules/PlacesUtils.jsm"); var bms = PlacesUtils.bookmarks; var index = bms.DEFAULT_INDEX;}} |作成|id = bms.insertBookmark(parentFolderID, URI, index, title)&br()id = bms.createFolder(parentFolderID, name, index)&br()id = bms.insertSeparator(parentFolderID, index)| |削除|bms.removeItem(id)&br()bms.removeFolderChildren(id)| |変更|bms.changeBookmarkURI(id, newURI)&br()bms.setItemTitle(id, title)| |位置を移動|bms.moveItem(id, newParentID, index)| *フォルダノードからフォルダの中身にアクセスし、処理する [[Places migration guide - MDN Docs>https://developer.mozilla.org/ja/Places_migration_guide]]のページにあるコードは間違いなので注意。 -[[nsINavHistoryResultNode - MDN Docs>https://developer.mozilla.org/En/NsINavHistoryResultNode]] -[[Querying Places - MDN Docs>https://developer.mozilla.org/en/Querying_Places]] #highlight(javascript){{ Components.utils.import("resource://gre/modules/Services.jsm"); var folderNode = ??? //アクセスしたいフォルダのノード folderNode.containerOpen = true; // フォルダを開く var nodeCount = folderNode.childCount; for (var i = 0; i < nodeCount; i++) { let childNode = folderNode.getChild(i); switch (childNode.type) { case childNode.RESULT_TYPE_URI : // URIアイテムの処理。例えばエラーコンソールにタイトルとURLを列挙 Services.console.logStringMessage("Title:" + childNode.title + "\nURL:" + childNode.uri); break; case childNode.RESULT_TYPE_FOLDER : // フォルダの処理。例えば再帰処理 arguments.callee(childNode); break; case childNode.RESULT_TYPE_SEPARATOR : // セパレーターの処理 break; case ~ } } folderNode.containerOpen = false; // フォルダを閉じる}} *注釈(Annotation) -[[Using the Places annotation service - MDN Docs>https://developer.mozilla.org/ja/Using_the_Places_annotation_service]] -[[nsIAnnotationService - MDN Docs>https://developer.mozilla.org/En/NsIAnnotationService]] *ブックマークメニューへの項目の追加 ブックマークフォルダ内の一番下にある「タブですべて開く」メニューのようにメニューを追加する方法。 ブックマークメニューは動的に生成されてるので、JavsScriptでやる必要がある。 omni.ja/chrome/browser/content/browser/places/browserPlacesViews.js内の PlacesViewBase.prototype._onPopupShowing にコードを追加してやればいい。 下のコードはちょっと古くて今は使えないので注意。ちゃんと調べて適切に実装するように。 #highlight(javascript){{ eval('PlacesViewBase.prototype._onPopupShowing = ' + PlacesViewBase.prototype._onPopupShowing.toString().replace( 'this._mayAddCommandsItems(popup);', '$& this.sampleAddItem(popup);') ); // 名前が被らないように注意 PlacesViewBase.prototype.sampleAddItem = function(aPopup) { // ルートメニューなら表示しない if (aPopup == this._rootElt) return; // ライブブックマークなら表示しない var itemId = aPopup._placesNode.itemId; if (itemId != -1 && PlacesUtils.itemIsLivemark(itemId)) return; if (!aPopup.sampleItem) { aPopup.sampleItem = document.createElement('menuitem'); aPopup.sampleItem.setAttribute('label', 'sample'); aPopup.appendChild(aPopup.sampleItem); } } }} *PlacesUtils によるノードの判別 PlacesUtils にはノード判別の関数が沢山用意されている。この情報も古い。 #highlight(javascript){{ PlacesUtils.nodeIsFolder(node); PlacesUtils.nodeIsBookmark(node); PlacesUtils.nodeIsSeparator(node); PlacesUtils.nodeIsVisit(node); PlacesUtils.nodeIsURI(node); PlacesUtils.nodeIsQuery(node); PlacesUtils.nodeIsReadOnly(node); PlacesUtils.nodeIsHost(node); PlacesUtils.nodeIsDay(node); PlacesUtils.nodeIsTagQuery(node); PlacesUtils.nodeIsContainer(node); PlacesUtils.nodeIsHistoryContainer(node); PlacesUtils.nodeIsDynamicContainer(node); PlacesUtils.nodeIsLivemarkContainer(node); PlacesUtils.nodeIsLivemarkItem(node);}} *[[ブックマークを開く際の処理の流れ]]
*ブックマークメニューへの項目の追加 ブックマークフォルダ内の一番下にある「タブですべて開く」メニューのようにメニューを追加する方法。 ブックマークメニューは動的に生成されてるので、JavsScriptでやる必要がある。 omni.ja/chrome/browser/content/browser/places/browserPlacesViews.js内の PlacesViewBase.prototype._onPopupShowing にコードを追加してやればいい。 下のコードはちょっと古くて今は使えないので注意。ちゃんと調べて適切に実装するように。 #highlight(javascript){{ eval('PlacesViewBase.prototype._onPopupShowing = ' + PlacesViewBase.prototype._onPopupShowing.toString().replace( 'this._mayAddCommandsItems(popup);', '$& this.sampleAddItem(popup);') ); // 名前が被らないように注意 PlacesViewBase.prototype.sampleAddItem = function(aPopup) { // ルートメニューなら表示しない if (aPopup == this._rootElt) return; // ライブブックマークなら表示しない var itemId = aPopup._placesNode.itemId; if (itemId != -1 && PlacesUtils.itemIsLivemark(itemId)) return; if (!aPopup.sampleItem) { aPopup.sampleItem = document.createElement('menuitem'); aPopup.sampleItem.setAttribute('label', 'sample'); aPopup.appendChild(aPopup.sampleItem); } } }}

表示オプション

横に並べて表示:
変化行の前後のみ表示: