I’ve read the following:
To follow the principle of “no surprises”, APIs like this can only be called from inside the handler for a user action. User actions include the following:
-
Clicking the extension's browser action or page action.
-
Selecting a context menu item defined by the extension.
-
Activating a keyboard shortcut defined by the extension (this only treated as a user action from Firefox 63 onwards).
-
Clicking a button in a page bundled with the extension.
from MDN and I understand it means that I can’t use
browser.sidebarAction.open()
from a content script, so how can I trigger the sidebar to launch if something gets clicked that is handled in a content script?
Any ideas how this can be solved?
Could you please help, Martin?
My extension is currently in ‘stuck’ mode, because I use a grid of favicons generated by a content script. When one of the favicons, representing a search engine, gets clicked, then I should display the search results in the sidebar.
The only way I could think of to handle this was to send a message from the content script to the background script, but I can’t use browser.sidebarAction.open() in the bg script because the click (user action) event handler is in the content script!
Pretty sure there’s nothing you can do. I think in theory sendMessage carries over the “user generated” flag, but I don’t think that flag applies for content script generated actions, but you could still try…
Generally you’d trigger it with a context menu item or a browser action or a page action etc. - in short, native UI that can’t leak to web content.
That’s a real pity because it means that I can’t use the grid of favicons shown below to make an XHR request for a mobile friendly page of search results that will look good in the sidebar. I don’t think it’s a good decision by the Firefox developers because the sidebar has a very limited width, so it’s preferable to set the header request for a mobile device. You can’t do that with browser.sidebarAction.setPanel by setting a targetUrl for the panel. The only way around this that I can think of is using a remote API to make the XHR request, but that means increased cloud hosting fees and there’s a privacy issue as well because some users are not happy to have their searches transferred to a remote server.
So the option I’m left with is to give users a somewhat ‘shitty’ experience with Firefox if you’ll excuse my saying!