Как создать папку закладок с помощью javascript?

Я смотрю на пример API MDN Javascript для bookmarks.create(). Я пытаюсь реализовать пример, в котором они должны научиться создавать папку:

function onBookmarkAdded(bookmarkItem) {
  console.log("Bookmark added with ID: " + bookmarkItem.id);
}

chrome.bookmarks.create({
  title: "bookmarks.create() on MDN",
  url: "https://developer.mozilla.org/Add-ons/WebExtensions/API/bookmarks/create"
}, onBookmarkAdded);

Это ничего не делает, насколько я могу судить. Мы будем очень признательны за любую помощь или другие примеры того, как создать папку для закладок.


person Robe    schedule 28.08.2016    source источник
comment
Создает закладку или папку под указанным parentId. Если URL равен NULL или отсутствует, это будет папка.   -  person Daniel Herr    schedule 28.08.2016
comment
Пожалуйста, отредактируйте свой вопрос, включив в него файл manifest.json.   -  person Makyen♦    schedule 28.08.2016


Ответы (1)


Если вы добавили "bookmaks" к permissions в файле manifest.json, тогда ваш код работает так, как написано для создания закладки. Поскольку ваш файл manifest.json не включен в вопрос, мы не можем определить, является ли это проблемой.

Чтобы создать папку закладок, вы либо опускаете свойство url, либо предоставляете url:null в объекте, который вы передаете bookmark.create()

Ниже приведено полное, протестированное (на FF48.0.2 и Developer Edition, FF50.0a2) расширение. Он заключен в код, который позволяет создавать закладки при нажатии кнопки browser_action. Я считаю, что для тестирования проще выполнять действия при нажатии кнопки browser_action, а не только при установке/запуске Firefox. Так и будет:

  1. Создайте закладку с названием и ссылкой: bookmarks.create() on MDN
  2. Создать папку закладок My Bookmark Folder A
  3. Создать папку закладок My Bookmark Folder B
  4. Создайте папку закладок My Bookmark Folder B.1 в My Bookmark Folder B

Все они создаются в разделе «Другие закладки», потому что при вызове bookmark.create() не предоставляется parentId для любого из них, которые не являются дочерними элементами папки закладок, создаваемой этим расширением.

background.js:

//* For testing, open the Browser Console
try{
    //alert() is not supported in Firefox. This forces the Browser Console open.
    //  This abuse of a misfeature works in FF49.0b+, not in FF48
    alert('Open the Browser Console.');
}catch(e){
    //alert() throws an error in Firefox versions below 49
    console.log('Alert() threw an error. Probably Firefox version below 49.');
}
//*

chrome.browserAction.onClicked.addListener(function(tab) {
    doBrowserAction();
});

function doBrowserAction(){
    console.log('Background: Doing action');
    createABookmark();
    createABookmarkFolder();
    createABookmarkFolderWithinABookmarkFolder();
}

function onBookmarkAdded(bookmarkItem) {
  console.log("Bookmark added with ID: " + bookmarkItem.id, bookmarkItem);
}

function createABookmark(){
    chrome.bookmarks.create({
      title: "bookmarks.create() on MDN",
      url: "https://developer.mozilla.org/Add-ons/WebExtensions/API/bookmarks/create"
    }, onBookmarkAdded);
}

function createABookmarkFolder(){
    chrome.bookmarks.create({
      title: "My Bookmark Folder A",
      url: null
    }, onBookmarkAdded);
}

function createABookmarkFolderWithinABookmarkFolder(){
    chrome.bookmarks.create({
      title: "My Bookmark Folder B",
      url: null
    }, bookmarkItem => {
        onBookmarkAdded(bookmarkItem);
        chrome.bookmarks.create({
          title: "My Bookmark Folder B.1",
          url: null,
          parentId: bookmarkItem.id
        },onBookmarkAdded 
        );
    });
}

manifest.json:

{
    "description": "Create a bookmark on browser_action button click",
    "manifest_version": 2,
    "name": "Demo: Create Bookmark",
    "version": "0.1",

    "applications": {
        "gecko": {
            //Firefox: must define id to use some features (e.g. option_ui)
            "id": "[email protected]",
            "strict_min_version": "48.0"
        }
    },

    "permissions": [
        "bookmarks"
    ],

    "background": {
        "scripts": [
            "background.js"
        ]
    },

    "browser_action": {
        "default_icon": {
            "32": "myIcon.png"
        },
        "default_title": "Do Action",
        "browser_style": true
    }
}

Очевидно, что если вы собираетесь использовать различные функции не только для демонстрации, вы захотите сделать их более универсальными (т. е. передавать обратные вызовы, свойства закладок и т. д.).

Примечание. См. раздел под названием "Общие примечания по тестированию и разработке WebExtensions в Firefox" этого ответа. Ваше утверждение «Насколько я могу судить, это ничего не делает» подразумевает, что вы не смотрите на консоль браузера для сообщения об ошибках или журналы консоли.

person Makyen♦    schedule 28.08.2016