Interact with the browser's tab system.
You can use this API to get a list of opened tabs, filtered by various criteria, and to open, update, move, reload, and remove tabs. You can't directly access the content hosted by tabs using this API, but you can insert JavaScript and CSS into tabs using the tabs.executeScript() or tabs.insertCSS() APIs.
You can use most of this API without any special permission. However:
Tab.url, Tab.title, and Tab.favIconUrl (or to filter by these properties via tabs.query()), you need to have the "tabs" permission, or have host permissions that match Tab.url. tabs.executeScript() or tabs.insertCSS(), you must have the host permission for the tabAlternatively, you can get these permissions temporarily, only for the currently active tab and only in response to an explicit user action, by asking for the "activeTab" permission.
Many tab operations use a Tab id. Tab ids are guaranteed to be unique to a single tab only within a browser session. If the browser is restarted, then it can and will reuse tab ids. To associate information with a tab across browser restarts, use sessions.setTabValue().
tabs.MutedInfoReasontabs.MutedInfotabs.PageSettingsUsed to control how a tab is rendered as a PDF by the tabs.saveAsPDF() method.
tabs.Tabtabs.TabStatustabs.WindowTypetabs.ZoomSettingsModetabs.ZoomSettingsScopetabs.ZoomSettingsmode, scope, and default zoom factor.tabs.TAB_ID_NONEtabs.captureTab()tabs.captureVisibleTab()tabs.connect()tabs.create()tabs.detectLanguage()tabs.discard()tabs.duplicate()tabs.executeScript()tabs.get()tabs.getAllInWindow()
tabs.getCurrent()tabs.Tab object.tabs.getSelected()
tabs.query({active: true}) instead.
tabs.getZoom()tabs.getZoomSettings()tabs.goForward()tabs.goBack()tabs.hide()
tabs.highlight()tabs.insertCSS()tabs.move()tabs.moveInSuccession()tabs.print()tabs.printPreview()tabs.query()tabs.reload()tabs.remove()tabs.removeCSS()tabs.insertCSS().tabs.saveAsPDF()tabs.sendMessage()tabs.sendRequest()
tabs.sendMessage() instead.tabs.setZoom()tabs.setZoomSettings()tabs.show()
hidden.tabs.toggleReaderMode()tabs.update()tabs.warmuptabs.onActivatedtabs.onActiveChanged
tabs.onActivated instead.tabs.onAttachedtabs.onCreatedtabs.onDetachedtabs.onHighlightChanged
tabs.onHighlighted instead.tabs.onHighlightedtabs.onMovedtabs.onRemovedtabs.onReplacedtabs.onSelectionChanged
tabs.onActivated instead.tabs.onUpdatedtabs.onZoomChange| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
MutedInfo |
Yes |
79 |
47 |
? |
Yes |
14
reason and extensionId will not be populated. |
? |
? |
No |
? |
? |
? |
MutedInfoReason |
Yes |
79 |
47 |
? |
Yes |
No |
? |
? |
No |
? |
? |
? |
PageSettings |
No |
No |
56 |
? |
No |
No |
? |
? |
No |
? |
? |
? |
TAB_ID_NONE |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
TabStatus |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
WindowType |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
ZoomSettings |
Yes |
79 |
45 |
? |
Yes |
No |
? |
? |
No |
? |
? |
? |
ZoomSettingsMode |
Yes |
79 |
45 |
? |
Yes |
No |
? |
? |
No |
? |
? |
? |
ZoomSettingsScope |
Yes |
79 |
45 |
? |
Yes |
No |
? |
? |
No |
? |
? |
? |
captureTab |
No |
No |
59 |
? |
No |
No |
? |
? |
82 |
? |
? |
? |
captureVisibleTab |
Yes
The default file format is 'jpeg'.
|
15 |
47 |
? |
Yes
The default file format is 'jpeg'.
|
14
["The default file format is 'jpeg'.", " permission not required to call this."]
|
? |
? |
54 |
? |
? |
? |
connect |
Yes |
79 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
create |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
detectLanguage |
Yes |
14 |
45 |
? |
Yes |
14
["Will return
und (undefined language) for OS lower than 10.16.", "Locale identifier will include the country code more often."] |
? |
? |
No |
? |
? |
? |
discard |
54
["Only accepts a single tab ID as a parameter, not an array.", "The tab ID argument is optional: if it is omitted, the browser discards the least important tab.", "The callback is passed a
Tab object representing the tab that was discarded.", "Tabs whose document contains a beforeunload listener that displays a prompt will be discarded."] |
14 |
58 |
? |
Yes
["Only accepts a single tab ID as a parameter, not an array.", "The tab ID argument is optional: if it is omitted, the browser discards the least important tab.", "The callback is passed a
Tab object representing the tab that was discarded.", "Tabs whose document contains a beforeunload listener that displays a prompt will be discarded."] |
No |
? |
? |
No |
? |
? |
? |
duplicate |
Yes |
79 |
47 |
? |
Yes |
14 |
? |
? |
No |
? |
? |
? |
executeScript |
Yes
Extensions can't inject scripts into their own pages using this API.
|
14 |
43
Before version 50, Firefox would pass a single result value into its callback rather than an array, unless 'allFrames' had been set.
|
? |
Yes
Extensions can't inject scripts into their own pages using this API.
|
14 |
? |
? |
54 |
? |
? |
? |
get |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
getAllInWindow |
Yes |
79 |
No |
? |
No |
No |
? |
? |
No |
? |
? |
? |
getCurrent |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
getSelected |
Yes |
79 |
No |
? |
No |
14 |
? |
? |
No |
? |
? |
? |
getZoom |
Yes |
79 |
45 |
? |
Yes |
14 |
? |
? |
No |
? |
? |
? |
getZoomSettings |
Yes |
79 |
45 |
? |
Yes |
No |
? |
? |
No |
? |
? |
? |
goBack |
72 |
79 |
77 |
? |
60 |
14 |
? |
? |
79 |
? |
? |
? |
goForward |
72 |
79 |
77 |
? |
60 |
14 |
? |
? |
79 |
? |
? |
? |
hide |
No |
No |
61 |
? |
No |
No |
? |
? |
No |
? |
? |
? |
highlight |
Yes |
79 |
63 |
? |
No |
No |
? |
? |
No |
? |
? |
? |
insertCSS |
Yes |
14 |
47 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
move |
Yes |
79 |
46 |
? |
Yes |
No |
? |
? |
No |
? |
? |
? |
moveInSuccession |
No |
No |
65 |
? |
No |
No |
? |
? |
No |
? |
? |
? |
onActivated |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
onActiveChanged |
Yes |
79 |
No |
? |
No |
No |
? |
? |
No |
? |
? |
? |
onAttached |
Yes |
15 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
onCreated |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
onDetached |
Yes |
15 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
onHighlightChanged |
Yes |
79 |
No |
? |
No |
No |
? |
? |
No |
? |
? |
? |
onHighlighted |
Yes |
79 |
63
45-62
Implemented as an alias for
onActivated. |
? |
No |
14 |
? |
? |
54
Implemented as an alias for
onActivated. |
? |
? |
? |
onMoved |
Yes |
79 |
45 |
? |
Yes |
14 |
? |
? |
No |
? |
? |
? |
onRemoved |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
onReplaced |
Yes |
79 |
No |
? |
Yes |
14 |
? |
? |
No |
? |
? |
? |
onSelectionChanged |
Yes |
79 |
No |
? |
No |
No |
? |
? |
No |
? |
? |
? |
onUpdated |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
onZoomChange |
Yes |
79 |
45 |
? |
Yes |
No |
? |
? |
No |
? |
? |
? |
print |
No |
No |
56 |
? |
No |
No |
? |
? |
No |
? |
? |
? |
printPreview |
No |
No |
56 |
? |
No |
No |
? |
? |
No |
? |
? |
? |
query |
Yes |
14
The
panel, app, devtools and popup values for WindowType are not supported. |
45 |
? |
Yes |
14
Pattern matching supports
* and ?. |
? |
? |
54 |
? |
? |
? |
reload |
Yes |
17 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
remove |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
removeCSS |
No |
No |
49 |
? |
No |
14 |
? |
? |
54 |
? |
? |
? |
saveAsPDF |
No |
No |
81
56-81
This function does not work on macOS.
|
? |
No |
No |
? |
? |
No |
? |
? |
? |
sendMessage |
Yes |
14
No response is sent after the receiving tab is refreshed if there is no `runtime.onMessage` listener.
|
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
sendRequest |
Yes |
79 |
No |
? |
No |
No |
? |
? |
No |
? |
? |
? |
setZoom |
Yes |
79 |
45 |
? |
Yes |
14 |
? |
? |
No |
? |
? |
? |
setZoomSettings |
Yes |
79 |
No |
? |
Yes |
No |
? |
? |
No |
? |
? |
? |
show |
No |
No |
61 |
? |
No |
No |
? |
? |
No |
? |
? |
? |
toggleReaderMode |
No |
No |
58 |
? |
No |
No |
? |
? |
No |
? |
? |
? |
update |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
? |
? |
warmup |
No |
No |
79 |
? |
No |
No |
? |
? |
No |
? |
? |
? |
Note: This API is based on Chromium's chrome.tabs API. This documentation is derived from tabs.json in the Chromium code.
Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
© 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs