「Places/ブックマークメニューへの項目の追加」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
#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);
}
} }}