The ``menu.onClicked`` event allows to open browser action popus. This works: ``` function contextualClickHandler() { browser.composeAction.openPopup(); } browser.menus.create({ id: "MENU1", title: "CLICK ME", contexts: ["all"] }); browser.menus.onClicked.addListener(contextualClickHandler); ``` However, if I want to check something in my local storage before opening the popup, I have to make contextualClickHandler async: ``` async function contextualClickHandler() { let data = await browser.storage.local.get(); // ... do something with data ... browser.composeAction.openPopup(); } browser.menus.create({ id: "MENU1", title: "CLICK ME", contexts: ["all"] }); browser.menus.onClicked.addListener(contextualClickHandler); ``` This throws a `openPopup() is only allowed to execute in a user input handler context`. The reason for this is probably, that the event is fired as a callback to `withHandlingUserInput ` (https://searchfox.org/mozilla-central/source/browser/components/extensions/child/ext-menus.js#274) and that does not await the callback, which means the handle is destroyed before the popup is opened.
Bug 1693829 Comment 0 Edit History
Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.
The ``menu.onClicked`` event allows to open browser action popus. This works: ``` function contextualClickHandler() { browser.browserAction.openPopup(); } browser.menus.create({ id: "MENU1", title: "CLICK ME", contexts: ["all"] }); browser.menus.onClicked.addListener(contextualClickHandler); ``` However, if I want to check something in my local storage before opening the popup, I have to make contextualClickHandler async: ``` async function contextualClickHandler() { let data = await browser.storage.local.get(); // ... do something with data ... browser.browserAction.openPopup(); } browser.menus.create({ id: "MENU1", title: "CLICK ME", contexts: ["all"] }); browser.menus.onClicked.addListener(contextualClickHandler); ``` This throws a `openPopup() is only allowed to execute in a user input handler context`. The reason for this is probably, that the event is fired as a callback to `withHandlingUserInput ` (https://searchfox.org/mozilla-central/source/browser/components/extensions/child/ext-menus.js#274) and that does not await the callback, which means the handle is destroyed before the popup is opened.