Добавить элементы контекстного меню в кнопку действия браузера расширения Chrome

Расширение G G может иметь действие браузера. Обычно разработчик ext отображает параметры, когда вы нажимаете на него, а это означает, что для каждого действия требуется два клика, даже действие по умолчанию 99% времени. Сам Chrome добавляет контекстное меню с несколькими параметрами: отключить ext, удалить ext, перейти на домашнюю страницу и т.д.

Могу ли я, поскольку разработчик ext добавить элементы в это контекстное меню, так что я могу сохранить свой 1-клик-действие под нормальным/левым/основным щелчком мыши?

Я знаю chrome.contextMenus, но это только для контекстных меню на странице (см. свойство contexts ').

Я не могу найти его в руководстве Chrome Extension dev, но вы знаете больше, чем я.

Ответ 1

теперь возможно, у него есть расширения Chrome. Ниже приведен рабочий пример "контекстного меню в действии браузера".

manifest.json:

{
    "name": "Custom context menu in browser action",
    "version": "1",
    "manifest_version": 2,
    "background": {
      "scripts": ["background.js"]
    },
    "browser_action": {
      "default_title": "Some tooltip",
      "default_popup": "popup.html"
    },
    "permissions": [
      "contextMenus"
    ],
    "icons": {
      "16": "icon16.png"
    }
}

background.js:

chrome.contextMenus.removeAll();
chrome.contextMenus.create({
      title: "first",
      contexts: ["browser_action"],
      onclick: function() {
        alert('first');
      }
});

Обратите внимание, что если вы используете страницу событий, вы не можете использовать атрибут onclick; вам нужно будет добавить слушателя вместо chrome.contextMenus.onClicked.

Ответ 2

Невозможно добавить любые пользовательские записи в контекстное меню.

Вы можете, однако, динамически назначить панель кнопке с chrome.browserAction.setPopup. Вы можете использовать страницу , чтобы пользователь мог выбрать предпочтительный вариант (однократное действие или два клика и несколько действий). Тот факт, что страница параметров находится всего в двух кликах от кнопки, также довольно приятна.

Здесь пример кода, чтобы проиллюстрировать концепцию переключения между панелями и одним щелчком мыши.

background.js (используется в event/справочная страница):

chrome.browserAction.onClicked.addListener(function() {
    // Only called when there no popup.
    alert('Next time you will see a popup again.');
    chrome.browserAction.setPopup({
        popup: 'popup.html'
    });
});

popup.html, просто для демонстрации (используйте CSS, чтобы он выглядел лучше):

<button>Click</button>
<script src="popup.js"></script>

popup.js, только для демонстрации. JavaScript должен быть помещен в отдельный файл из-за CSP.

document.querySelector('button').onclick = function() {
    chrome.browserAction.setPopup({
        popup: '' // Empty string = no popup
    });
    alert('Next time, you will not see the popup.');
    // Close panel
    window.close();
};

Как вы можете видеть в этом примере, chrome.browserAction.setPopup также доступен на всплывающей странице.

PS. manifest.json, поэтому вы можете скопировать-вставить пример и сыграть с этим ответом.

{
    "name": "Test badge - minimal example",
    "version": "1",
    "manifest_version": 2,
    "background": {
        "scripts": ["background.js"]
    },
    "browser_action": {
        "default_title": "Some tooltip"
    }
}