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 id
s 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 id
s. To associate information with a tab across browser restarts, use sessions.setTabValue()
.
tabs.MutedInfoReason
tabs.MutedInfo
tabs.PageSettings
Used to control how a tab is rendered as a PDF by the tabs.saveAsPDF()
method.
tabs.Tab
tabs.TabStatus
tabs.WindowType
tabs.ZoomSettingsMode
tabs.ZoomSettingsScope
tabs.ZoomSettings
mode
, scope
, and default zoom factor.tabs.TAB_ID_NONE
tabs.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.warmup
tabs.onActivated
tabs.onActiveChanged
tabs.onActivated
instead.tabs.onAttached
tabs.onCreated
tabs.onDetached
tabs.onHighlightChanged
tabs.onHighlighted
instead.tabs.onHighlighted
tabs.onMoved
tabs.onRemoved
tabs.onReplaced
tabs.onSelectionChanged
tabs.onActivated
instead.tabs.onUpdated
tabs.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