tabs
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:
Alternatively, 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()
.
Properties
-
tabs.TAB_ID_NONE
-
A special ID value given to tabs that are not browser tabs (for example, tabs in devtools windows).
Browser compatibility
|
Desktop |
Mobile |
|
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
WebView Android |
Chrome Android |
Firefox for Android |
Opera Android |
Safari on IOS |
Samsung Internet |
MutedInfo |
46 |
79 |
47 |
? |
33 |
14reason and extensionId will not be populated.
|
? |
? |
No |
? |
No |
? |
MutedInfoReason |
46 |
79 |
47 |
? |
33 |
No |
? |
? |
No |
? |
No |
? |
PageSettings |
No |
No |
56 |
? |
No |
No |
? |
? |
No |
? |
No |
? |
TAB_ID_NONE |
46 |
14 |
45 |
? |
33 |
14 |
? |
? |
54 |
? |
15 |
? |
TabStatus |
5 |
14 |
45 |
? |
15 |
14 |
? |
? |
54 |
? |
15 |
? |
WindowType |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
ZoomSettings |
38 |
79 |
45 |
? |
25 |
No |
? |
? |
No |
? |
No |
? |
ZoomSettingsMode |
38 |
79 |
45 |
? |
25 |
No |
? |
? |
No |
? |
No |
? |
ZoomSettingsScope |
38 |
79 |
45 |
? |
25 |
No |
? |
? |
No |
? |
No |
? |
captureTab |
No |
No |
59 |
? |
No |
No |
? |
? |
82 |
? |
No |
? |
captureVisibleTab |
5The default file format is 'jpeg'.
|
15 |
47 |
? |
15The default file format is 'jpeg'.
|
14["The default file format is 'jpeg'.", "<all_urls> permission is optional."]
|
? |
? |
54 |
? |
15["The default file format is 'jpeg'.", "<all_urls> permission is optional."]
|
? |
connect |
5 |
79 |
45 |
? |
15 |
14 |
? |
? |
54 |
? |
15 |
? |
create |
5 |
14 |
45 |
? |
15 |
14 |
? |
? |
54 |
? |
15 |
? |
detectLanguage |
5 |
14 |
45 |
? |
15 |
14["Will return und (undefined language) for OS lower than 11.", "Locale identifier will include the country code more often."]
|
? |
? |
No |
? |
15 |
? |
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 |
? |
41["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 |
? |
No |
? |
duplicate |
23 |
79 |
47 |
? |
15 |
14 |
? |
? |
No |
? |
15 |
? |
executeScript |
5["Extensions can't inject scripts into their own pages using this API.", "Available for use in Manifest V2 only."]
|
14Available for use in Manifest V2 only.
|
43["Before version 50, Firefox would pass a single result value into its callback rather than an array, unless 'allFrames' had been set.", "Available for use in Manifest V2 only."]
|
? |
15["Extensions can't inject scripts into their own pages using this API.", "Available for use in Manifest V2 only."]
|
14Available for use in Manifest V2 only.
|
? |
? |
54Available for use in Manifest V2 only.
|
? |
15Available for use in Manifest V2 only.
|
? |
get |
5 |
14 |
45 |
? |
15 |
14 |
? |
? |
54 |
? |
15 |
? |
getAllInWindow |
5 |
79 |
No |
? |
No |
No |
? |
? |
No |
? |
No |
? |
getCurrent |
6 |
14 |
45 |
? |
15 |
14 |
? |
? |
54 |
? |
15 |
? |
getSelected |
Yes |
79 |
No |
? |
No |
14 |
? |
? |
No |
? |
15 |
? |
getZoom |
Yes |
79 |
45 |
? |
Yes |
14 |
? |
? |
No |
? |
15 |
? |
getZoomSettings |
42 |
79 |
45 |
? |
29 |
No |
? |
? |
No |
? |
No |
? |
goBack |
72 |
79 |
77 |
? |
60 |
14 |
? |
? |
79 |
? |
15 |
? |
goForward |
72 |
79 |
77 |
? |
60 |
14 |
? |
? |
79 |
? |
15 |
? |
hide |
No |
No |
61 |
? |
No |
No |
? |
? |
No |
? |
No |
? |
highlight |
Yes |
79 |
63 |
? |
No |
No |
? |
? |
No |
? |
No |
? |
insertCSS |
YesAvailable for use in Manifest V2 only.
|
14Available for use in Manifest V2 only.
|
47Available for use in Manifest V2 only.
|
? |
YesAvailable for use in Manifest V2 only.
|
14Available for use in Manifest V2 only.
|
? |
? |
54Available for use in Manifest V2 only.
|
? |
15Available for use in Manifest V2 only.
|
? |
move |
Yes |
79 |
46 |
? |
Yes |
No |
? |
? |
No |
? |
No |
? |
moveInSuccession |
No |
No |
65 |
? |
No |
No |
? |
? |
No |
? |
No |
? |
onActivated |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
onActiveChanged |
Yes |
79 |
No |
? |
No |
No |
? |
? |
No |
? |
No |
? |
onAttached |
Yes |
15 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
onCreated |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
onDetached |
Yes |
15 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
onHighlightChanged |
Yes |
79 |
No |
? |
No |
No |
? |
? |
No |
? |
No |
? |
onHighlighted |
Yes |
79 |
63
45–62Implemented as an alias for onActivated .
|
? |
No |
14 |
? |
? |
54Implemented as an alias for onActivated .
|
? |
15 |
? |
onMoved |
Yes |
79 |
45 |
? |
Yes |
14 |
? |
? |
No |
? |
15 |
? |
onRemoved |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
onReplaced |
Yes |
79 |
No |
? |
Yes |
No |
? |
? |
No |
? |
No |
? |
onSelectionChanged |
Yes |
79 |
No |
? |
No |
No |
? |
? |
No |
? |
No |
? |
onUpdated |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
onZoomChange |
Yes |
79 |
45 |
? |
Yes |
No |
? |
? |
No |
? |
No |
? |
print |
No |
No |
56 |
? |
No |
No |
? |
? |
No |
? |
No |
? |
printPreview |
No |
No |
56 |
? |
No |
No |
? |
? |
No |
? |
No |
? |
query |
Yes |
14The panel , app , devtools and popup values for WindowType are not supported.
|
45 |
? |
Yes |
14Pattern matching supports * and ? .
|
? |
? |
54 |
? |
15Pattern matching supports * and ? .
|
? |
reload |
Yes |
17 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
remove |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
removeCSS |
87Available for use in Manifest V2 only.
|
87Available for use in Manifest V2 only.
|
49Available for use in Manifest V2 only.
|
? |
73Available for use in Manifest V2 only.
|
14Available for use in Manifest V2 only.
|
? |
? |
54Available for use in Manifest V2 only.
|
? |
15Available for use in Manifest V2 only.
|
? |
saveAsPDF |
No |
No |
81
56–81This function does not work on macOS.
|
? |
No |
No |
? |
? |
No |
? |
No |
? |
sendMessage |
Yes |
14No response is sent after the receiving tab is refreshed if there is no runtime.onMessage listener.
|
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
sendRequest |
Yes |
79 |
No |
? |
No |
No |
? |
? |
No |
? |
No |
? |
setZoom |
Yes |
79 |
45 |
? |
Yes |
14 |
? |
? |
No |
? |
15 |
? |
setZoomSettings |
Yes |
79 |
No |
? |
Yes |
No |
? |
? |
No |
? |
No |
? |
show |
No |
No |
61 |
? |
No |
No |
? |
? |
No |
? |
No |
? |
toggleReaderMode |
No |
No |
58 |
? |
No |
No |
? |
? |
No |
? |
No |
? |
update |
Yes |
14 |
45 |
? |
Yes |
14 |
? |
? |
54 |
? |
15 |
? |
warmup |
No |
No |
79 |
? |
No |
No |
? |
? |
No |
? |
No |
? |
Example extensions
Note: This API is based on Chromium's chrome.tabs
API. This documentation is derived from tabs.json
in the Chromium code.