chrome.tabs

Description: Use the chrome.tabs API to interact with the browser's tab system. You can use this API to create, modify, and rearrange tabs in the browser.
Availability: Stable since Chrome 5.
Permissions: The majority of the chrome.tabs API can be used without declaring any permission. However, the "tabs" permission is required in order to populate the url, title, and favIconUrl properties of Tab.

Manifest

You can use most chrome.tabs methods and events without declaring any permissions in the extension's manifest file. However, if you require access to the url, title, or favIconUrl properties of tabs.Tab, you must declare the "tabs" permission in the manifest, as shown below:

      {
        "name": "My extension",
        ...
        "permissions": [
          "tabs"
        ],
        ...
      }
      

Examples

Two tabs in a window
You can find simple examples of manipulating tabs with the chrome.tabs API in the examples/api/tabs directory. For other examples and for help in viewing the source code, see Samples.

Summary

Types
Tab
InjectDetails
Methods
get chrome.tabs.get(integer tabId, function callback)
getCurrent chrome.tabs.getCurrent(function callback)
connect runtime.Port chrome.tabs.connect(integer tabId, object connectInfo)
sendRequest chrome.tabs.sendRequest(integer tabId, any request, function responseCallback)
sendMessage chrome.tabs.sendMessage(integer tabId, any message, function responseCallback)
getSelected chrome.tabs.getSelected(integer windowId, function callback)
getAllInWindow chrome.tabs.getAllInWindow(integer windowId, function callback)
create chrome.tabs.create(object createProperties, function callback)
duplicate chrome.tabs.duplicate(integer tabId, function callback)
query chrome.tabs.query(object queryInfo, function callback)
highlight chrome.tabs.highlight(object highlightInfo, function callback)
update chrome.tabs.update(integer tabId, object updateProperties, function callback)
move chrome.tabs.move(integer or array of integer tabIds, object moveProperties, function callback)
reload chrome.tabs.reload(integer tabId, object reloadProperties, function callback)
remove chrome.tabs.remove(integer or array of integer tabIds, function callback)
detectLanguage chrome.tabs.detectLanguage(integer tabId, function callback)
captureVisibleTab chrome.tabs.captureVisibleTab(integer windowId, types.ImageDetails options, function callback)
executeScript chrome.tabs.executeScript(integer tabId, tabs.InjectDetails details, function callback)
insertCSS chrome.tabs.insertCSS(integer tabId, tabs.InjectDetails details, function callback)
Events
onCreated
onUpdated
onMoved
onSelectionChanged
onActiveChanged
onActivated
onHighlightChanged
onHighlighted
onDetached
onAttached
onRemoved
onReplaced

Types

Tab

properties
integer (optional) id The ID of the tab. Tab IDs are unique within a browser session. Under some circumstances a Tab may not be assigned an ID, for example when querying foreign tabs using the sessions API, in which case a session ID may be present.
integer index The zero-based index of the tab within its window.
integer windowId The ID of the window the tab is contained within.
integer (optional) openerTabId The ID of the tab that opened this tab, if any. This property is only present if the opener tab still exists.
boolean selected

selected is deprecated. Please use tabs.Tab.highlighted.

Whether the tab is selected.
boolean highlighted Whether the tab is highlighted.
boolean active Whether the tab is active in its window. (Does not necessarily mean the window is focused.)
boolean pinned Whether the tab is pinned.
string (optional) url The URL the tab is displaying. This property is only present if the extension's manifest includes the "tabs" permission.
string (optional) title The title of the tab. This property is only present if the extension's manifest includes the "tabs" permission.
string (optional) favIconUrl The URL of the tab's favicon. This property is only present if the extension's manifest includes the "tabs" permission. It may also be an empty string if the tab is loading.
string (optional) status Either loading or complete.
boolean incognito Whether the tab is in an incognito window.
integer (optional) width The width of the tab in pixels.
integer (optional) height The height of the tab in pixels.
string (optional) sessionId The session ID used to uniquely identify a Tab obtained from the sessions API.

InjectDetails

Details of the script or CSS to inject. Either the code or the file property must be set, but both may not be set at the same time.
properties
string (optional) code JavaScript or CSS code to inject.
string (optional) file JavaScript or CSS file to inject.
boolean (optional) allFrames If allFrames is true, implies that the JavaScript or CSS should be injected into all frames of current page. By default, it's false and is only injected into the top frame.
enum of "document_start", "document_end", or "document_idle" (optional) runAt The soonest that the JavaScript or CSS will be injected into the tab. Defaults to "document_idle".

Methods

get

chrome.tabs.get(integer tabId, function callback)

Retrieves details about the specified tab.

Parameters
integer tabId
function callback

The callback parameter should be a function that looks like this:

function( Tab tab) {...};
Tab tab

getCurrent

chrome.tabs.getCurrent(function callback)

Gets the tab that this script call is being made from. May be undefined if called from a non-tab context (for example: a background page or popup view).

Parameters
function callback

The callback parameter should be a function that looks like this:

function( Tab tab) {...};
Tab (optional) tab

connect

runtime.Port chrome.tabs.connect(integer tabId, object connectInfo)

Connects to the content script(s) in the specified tab. The runtime.onConnect event is fired in each content script running in the specified tab for the current extension. For more details, see Content Script Messaging.

Parameters
integer tabId
object (optional) connectInfo
string (optional) name Will be passed into onConnect for content scripts that are listening for the connection event.

sendRequest

sendRequest is deprecated. Please use runtime.sendMessage.

chrome.tabs.sendRequest(integer tabId, any request, function responseCallback)

Sends a single request to the content script(s) in the specified tab, with an optional callback to run when a response is sent back. The extension.onRequest event is fired in each content script running in the specified tab for the current extension.

Parameters
integer tabId
any request
function (optional) responseCallback

If you specify the responseCallback parameter, it should be a function that looks like this:

function(any response) {...};
any response The JSON response object sent by the handler of the request. If an error occurs while connecting to the specified tab, the callback will be called with no arguments and runtime.lastError will be set to the error message.

sendMessage

chrome.tabs.sendMessage(integer tabId, any message, function responseCallback)

Sends a single message to the content script(s) in the specified tab, with an optional callback to run when a response is sent back. The runtime.onMessage event is fired in each content script running in the specified tab for the current extension.

Parameters
integer tabId
any message
function (optional) responseCallback

If you specify the responseCallback parameter, it should be a function that looks like this:

function(any response) {...};
any response The JSON response object sent by the handler of the message. If an error occurs while connecting to the specified tab, the callback will be called with no arguments and runtime.lastError will be set to the error message.

getSelected

getSelected is deprecated. Please use tabs.query {active: true}.

chrome.tabs.getSelected(integer windowId, function callback)

Gets the tab that is selected in the specified window.

Parameters
integer (optional) windowId Defaults to the current window.
function callback

The callback parameter should be a function that looks like this:

function( Tab tab) {...};
Tab tab

getAllInWindow

getAllInWindow is deprecated. Please use tabs.query {windowId: windowId}.

chrome.tabs.getAllInWindow(integer windowId, function callback)

Gets details about all tabs in the specified window.

Parameters
integer (optional) windowId Defaults to the current window.
function callback

The callback parameter should be a function that looks like this:

function(array of Tab tabs) {...};
array of Tab tabs

create

chrome.tabs.create(object createProperties, function callback)

Creates a new tab.

Parameters
object createProperties
integer (optional) windowId The window to create the new tab in. Defaults to the current window.
integer (optional) index The position the tab should take in the window. The provided value will be clamped to between zero and the number of tabs in the window.
string (optional) url The URL to navigate the tab to initially. Fully-qualified URLs must include a scheme (i.e. 'http://www.google.com', not 'www.google.com'). Relative URLs will be relative to the current page within the extension. Defaults to the New Tab Page.
boolean (optional) active Whether the tab should become the active tab in the window. Does not affect whether the window is focused (see windows.update). Defaults to true.
boolean (optional) selected

selected is deprecated. Please use active.

Whether the tab should become the selected tab in the window. Defaults to true
boolean (optional) pinned Whether the tab should be pinned. Defaults to false
integer (optional) openerTabId The ID of the tab that opened this tab. If specified, the opener tab must be in the same window as the newly created tab.
function (optional) callback

If you specify the callback parameter, it should be a function that looks like this:

function( Tab tab) {...};
Tab tab Details about the created tab. Will contain the ID of the new tab.

duplicate

chrome.tabs.duplicate(integer tabId, function callback)

Duplicates a tab.

Parameters
integer tabId The ID of the tab which is to be duplicated.
function (optional) callback

If you specify the callback parameter, it should be a function that looks like this:

function( Tab tab) {...};
Tab (optional) tab Details about the duplicated tab. The tabs.Tab object doesn't contain url, title and favIconUrl if the "tabs" permission has not been requested.

query

chrome.tabs.query(object queryInfo, function callback)

Gets all tabs that have the specified properties, or all tabs if no properties are specified.

Parameters
object queryInfo
boolean (optional) active Whether the tabs are active in their windows.
boolean (optional) pinned Whether the tabs are pinned.
boolean (optional) highlighted Whether the tabs are highlighted.
boolean (optional) currentWindow Whether the tabs are in the current window.
boolean (optional) lastFocusedWindow Whether the tabs are in the last focused window.
enum of "loading", or "complete" (optional) status Whether the tabs have completed loading.
string (optional) title Match page titles against a pattern.
string (optional) url Match tabs against a URL pattern. Note that fragment identifiers are not matched.
integer (optional) windowId The ID of the parent window, or windows.WINDOW_ID_CURRENT for the current window.
enum of "normal", "popup", "panel", or "app" (optional) windowType The type of window the tabs are in.
integer (optional) index The position of the tabs within their windows.
function callback

The callback parameter should be a function that looks like this:

function(array of Tab result) {...};
array of Tab result

highlight

chrome.tabs.highlight(object highlightInfo, function callback)

Highlights the given tabs.

Parameters
object highlightInfo
integer (optional) windowId The window that contains the tabs.
array of integer or integer tabs One or more tab indices to highlight.
function callback

The callback parameter should be a function that looks like this:

function( windows.Window window) {...};
windows.Window window Contains details about the window whose tabs were highlighted.

update

chrome.tabs.update(integer tabId, object updateProperties, function callback)

Modifies the properties of a tab. Properties that are not specified in updateProperties are not modified.

Parameters
integer (optional) tabId Defaults to the selected tab of the current window.
object updateProperties
string (optional) url A URL to navigate the tab to.
boolean (optional) active Whether the tab should be active. Does not affect whether the window is focused (see windows.update).
boolean (optional) highlighted Adds or removes the tab from the current selection.
boolean (optional) selected

selected is deprecated. Please use highlighted.

Whether the tab should be selected.
boolean (optional) pinned Whether the tab should be pinned.
integer (optional) openerTabId The ID of the tab that opened this tab. If specified, the opener tab must be in the same window as this tab.
function (optional) callback

If you specify the callback parameter, it should be a function that looks like this:

function( Tab tab) {...};
Tab (optional) tab Details about the updated tab. The tabs.Tab object doesn't contain url, title and favIconUrl if the "tabs" permission has not been requested.

move

chrome.tabs.move(integer or array of integer tabIds, object moveProperties, function callback)

Moves one or more tabs to a new position within its window, or to a new window. Note that tabs can only be moved to and from normal (window.type === "normal") windows.

Parameters
integer or array of integer tabIds The tab or list of tabs to move.
object moveProperties
integer (optional) windowId Defaults to the window the tab is currently in.
integer index The position to move the window to. -1 will place the tab at the end of the window.
function (optional) callback

If you specify the callback parameter, it should be a function that looks like this:

function( Tab or array of Tab tabs) {...};
Tab or array of Tab tabs Details about the moved tabs.

reload

chrome.tabs.reload(integer tabId, object reloadProperties, function callback)

Reload a tab.

Parameters
integer (optional) tabId The ID of the tab to reload; defaults to the selected tab of the current window.
object (optional) reloadProperties
boolean (optional) bypassCache Whether using any local cache. Default is false.
function (optional) callback

If you specify the callback parameter, it should be a function that looks like this:

function() {...};

remove

chrome.tabs.remove(integer or array of integer tabIds, function callback)

Closes one or more tabs.

Parameters
integer or array of integer tabIds The tab or list of tabs to close.
function (optional) callback

If you specify the callback parameter, it should be a function that looks like this:

function() {...};

detectLanguage

chrome.tabs.detectLanguage(integer tabId, function callback)

Detects the primary language of the content in a tab.

Parameters
integer (optional) tabId Defaults to the active tab of the current window.
function callback

The callback parameter should be a function that looks like this:

function(string language) {...};
string language An ISO language code such as en or fr. For a complete list of languages supported by this method, see kLanguageInfoTable. The 2nd to 4th columns will be checked and the first non-NULL value will be returned except for Simplified Chinese for which zh-CN will be returned. For an unknown language, und will be returned.

captureVisibleTab

chrome.tabs.captureVisibleTab(integer windowId, types.ImageDetails options, function callback)

Captures the visible area of the currently active tab in the specified window. You must have host permission for the URL displayed by the tab.

Parameters
integer (optional) windowId The target window. Defaults to the current window.
types.ImageDetails (optional) options
function callback

The callback parameter should be a function that looks like this:

function(string dataUrl) {...};
string dataUrl A data URL which encodes an image of the visible area of the captured tab. May be assigned to the 'src' property of an HTML Image element for display.

executeScript

chrome.tabs.executeScript(integer tabId, tabs.InjectDetails details, function callback)

Injects JavaScript code into a page. For details, see the programmatic injection section of the content scripts doc.

Parameters
integer (optional) tabId The ID of the tab in which to run the script; defaults to the active tab of the current window.
tabs.InjectDetails details Details of the script to run.
function (optional) callback Called after all the JavaScript has been executed.

If you specify the callback parameter, it should be a function that looks like this:

function(array of any result) {...};
array of any (optional) result The result of the script in every injected frame.

insertCSS

chrome.tabs.insertCSS(integer tabId, tabs.InjectDetails details, function callback)

Injects CSS into a page. For details, see the programmatic injection section of the content scripts doc.

Parameters
integer (optional) tabId The ID of the tab in which to insert the CSS; defaults to the active tab of the current window.
tabs.InjectDetails details Details of the CSS text to insert.
function (optional) callback Called when all the CSS has been inserted.

If you specify the callback parameter, it should be a function that looks like this:

function() {...};

Events

onCreated

Fired when a tab is created. Note that the tab's URL may not be set at the time this event fired, but you can listen to onUpdated events to be notified when a URL is set.

addListener

chrome.tabs.onCreated.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function( Tab tab) {...};
Tab tab Details of the tab that was created.

onUpdated

Fired when a tab is updated.

addListener

chrome.tabs.onUpdated.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(integer tabId, object changeInfo, Tab tab) {...};
integer tabId
object changeInfo Lists the changes to the state of the tab that was updated.
string (optional) status The status of the tab. Can be either loading or complete.
string (optional) url The tab's URL if it has changed.
boolean (optional) pinned The tab's new pinned state.
string (optional) favIconUrl The tab's new favicon URL.
Tab tab Gives the state of the tab that was updated.

onMoved

Fired when a tab is moved within a window. Only one move event is fired, representing the tab the user directly moved. Move events are not fired for the other tabs that must move in response. This event is not fired when a tab is moved between windows. For that, see tabs.onDetached.

addListener

chrome.tabs.onMoved.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(integer tabId, object moveInfo) {...};
integer tabId
object moveInfo
integer windowId
integer fromIndex
integer toIndex

onSelectionChanged

onSelectionChanged is deprecated. Please use tabs.onActivated.

Fires when the selected tab in a window changes.

addListener

chrome.tabs.onSelectionChanged.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(integer tabId, object selectInfo) {...};
integer tabId The ID of the tab that has become active.
object selectInfo
integer windowId The ID of the window the selected tab changed inside of.

onActiveChanged

onActiveChanged is deprecated. Please use tabs.onActivated.

Fires when the selected tab in a window changes. Note that the tab's URL may not be set at the time this event fired, but you can listen to tabs.onUpdated events to be notified when a URL is set.

addListener

chrome.tabs.onActiveChanged.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(integer tabId, object selectInfo) {...};
integer tabId The ID of the tab that has become active.
object selectInfo
integer windowId The ID of the window the selected tab changed inside of.

onActivated

Fires when the active tab in a window changes. Note that the tab's URL may not be set at the time this event fired, but you can listen to onUpdated events to be notified when a URL is set.

addListener

chrome.tabs.onActivated.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(object activeInfo) {...};
object activeInfo
integer tabId The ID of the tab that has become active.
integer windowId The ID of the window the active tab changed inside of.

onHighlightChanged

onHighlightChanged is deprecated. Please use tabs.onHighlighted.

Fired when the highlighted or selected tabs in a window changes.

addListener

chrome.tabs.onHighlightChanged.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(object selectInfo) {...};
object selectInfo
integer windowId The window whose tabs changed.
array of integer tabIds All highlighted tabs in the window.

onHighlighted

Fired when the highlighted or selected tabs in a window changes.

addListener

chrome.tabs.onHighlighted.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(object highlightInfo) {...};
object highlightInfo
integer windowId The window whose tabs changed.
array of integer tabIds All highlighted tabs in the window.

onDetached

Fired when a tab is detached from a window, for example because it is being moved between windows.

addListener

chrome.tabs.onDetached.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(integer tabId, object detachInfo) {...};
integer tabId
object detachInfo
integer oldWindowId
integer oldPosition

onAttached

Fired when a tab is attached to a window, for example because it was moved between windows.

addListener

chrome.tabs.onAttached.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(integer tabId, object attachInfo) {...};
integer tabId
object attachInfo
integer newWindowId
integer newPosition

onRemoved

Fired when a tab is closed.

addListener

chrome.tabs.onRemoved.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(integer tabId, object removeInfo) {...};
integer tabId
object removeInfo
integer windowId The window whose tab is closed.
boolean isWindowClosing True when the tab is being closed because its window is being closed.

onReplaced

Fired when a tab is replaced with another tab due to prerendering or instant.

addListener

chrome.tabs.onReplaced.addListener(function callback)
Parameters
function callback

The callback parameter should be a function that looks like this:

function(integer addedTabId, integer removedTabId) {...};
integer addedTabId
integer removedTabId