Помогите написать скрипт добавления вкладки в закладки.
Есть такой код, который я взял из плагина bookmarkthistab:

Выделить код

Код:

<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <popupset id="mainPopupSet">
        <menupopup id="tabContextMenu">
            <menuitem insertbefore="context_bookmarkAllTabs" 
                command="Browser:AddBookmarkAs" 
                label="Bookmark This Tab" />
        </menupopup>
    </popupset>
</window>

Но он добавляет текущую открытую вкладку в закладки (даже если кликнуть по другой).
Я нашел способ (как мне кажется), получить кликнутую вкладку через gBrowser.selectetTab (если не ошибаюсь).
Теперь мне нужна помощь: как наз. ф-ция добавления в закладки и можно-ли туда передать эту табу? я помню что-то видел подобное, но оно принимало урл и тайтл (как из selectedTab получить урл и тайтл?).

Заранее спасибо (сам я программирую на плюсах \ шарпе и не знаю даже что собсно гуглить =\ а новый язык учить из-за такой мелочи неохота).

Можно сделать как в пункте «Добавить страницу в закладки» контекстного меню страницы.
Там

Выделить код

Код:

oncommand="gContextMenu.bookmarkThisPage();"

chrome://browser/content/nsContextMenu.js

Выделить код

Код:

bookmarkThisPage: function CM_bookmarkThisPage() {
    window.top.PlacesCommandHook.bookmarkPage(this.browser, PlacesUtils.bookmarksMenuFolderId, true);
  },

Далее посмотреть на

label="Обновить вкладку"
oncommand="gBrowser.reloadTab(TabContextMenu.contextTab);"

и попробовать что-нибудь вроде

Выделить код

Код:

<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <popupset id="mainPopupSet">
        <menupopup id="tabContextMenu">
            <menuitem insertbefore="context_bookmarkAllTabs"
                oncommand="window.top.PlacesCommandHook.bookmarkPage(TabContextMenu.contextTab.linkedBrowser, PlacesUtils.bookmarksMenuFolderId, true);"
                label="Bookmark This Tab" />
        </menupopup>
    </popupset>
</window>

01-12-2012 00:55:44

Zedx пишет

Громаднейшее спасибо! Все работает!
(правда по началу добавляло имя как адрес, но  после получаса манипуляций я понял что я кликал еще не по подгруженной вкладке (когда перезапустил ФФ все вкладки кроме текущей не активны, я об этом), думал нужно передать третий параметр (который бул):blush:).

Еще вопрос:
insertbefore="context_bookmarkAllTabs"

не работает эта строчка кода (меню получается в самом низу). Не подскажите как исправить?

Прошу прощения. Портил все Menu Editor. Все работает!

Еще хотелось бы сделать, что-бы ФФ запоминал последний ИД добавленной папки вкладок (т.е. добавили закладку в папку Test и добавляя другую вкладку в закладки, что-бы по умолчанию стояла уже эта папка Test).

PlacesCommandHook.bookmarkPage(TabContextMenu.contextTab.linkedBrowser, PlacesUtils.bookmarksMenuFolderId, true);
3-й параметр как-раз и передаёт АЙди папки.

Вопрос:
Как сделать, чтобы при сохранении закладки менялся и bookmarksMenuFolderId на значение папки этой самой сохраненной закладки.
Или если этого сделать нельзя, получается нужно завести скрипт, в котором объявить переменную, которая будет хранить последний индекс сохраненной папки?

Заранее спасибо за ответ.

Окей. Может кто-то подскажет как отловить событие закрытия окна закладок? и в нем сделать что-то типа:

Выделить код

Код:

var bmm = document.getElementById("bookmarksMenuPopup");
if (bmm)
bmm.addEventListener("popuphiding", oncloseBookmarksMenu, false);

А в oncloseBookmarksMenu получить ИД выбранной папки и сохранить ее в переменную (которую мы будет передавать в PlacesCommandHook.bookmarkPage)? не?