赞
踩
Chrome.tabs API
解析使用 chrome.tabs API
与浏览器的标签页系统进行交互,可以使用此 API
在浏览器中创建、修改和重新排列标签页
Tabs API
不仅提供操作和管理标签页的功能,还可以检测标签页的语言、截取屏幕截图,以及与标签页的内容脚本进行通信
Service Worker
和 action
页面可以使用 Tabs API
,但 content script
中不能使用
chrome.tabs
内容Service worker
中 tabs
内容Action
中 tabs
内容大多数功能都不需要任何权限即可使用,如创建新标签页、重新加载标签页、导航到其他网址等
使用 Tabs API
时需要注意三种权限
tabs
权限host_permissions
activeTab
权限tabs
权限{
"name": "My extension",
"permissions": [
"tabs"
],
}
此权限不授予对 chrome.tabs
命名空间的访问权限。而是会授予插件针对 tabs.Tab
实例上的四个敏感属性调用 tabs.query()
的权限:url、pendingUrl、title
和 favIconUrl
host_permissions
{
"name": "My extension",
"host_permissions": [
"http://*/*",
"https://*/*"
],
}
主机权限允许插件读取和查询匹配标签页的四个敏感 tabs.Tab
属性。他们还可以使用 tabs.captureVisibleTab()、tabs.executeScript()、tabs.insertCSS()
和 tabs.removeCSS()
等方法直接与匹配的标签页互动
activeTab
权限{
"name": "My extension",
"permissions": [
"activeTab"
],
}
activeTab
授予插件对当前标签页的临时主机权限,以响应用户调用。与主机权限不同,activeTab
不会触发任何警告
chrome.tabs
类型(Types
)MutedInfo
标签页的静音状态以及上次状态更改的原因。
extensionId:string
muted:boolean
reason:MutedInfoReason
MutedInfoReason
导致静音状态更改的事件。
user
capture
extension
extensionId
字段标识的插件,用于设置静音状态Tab
active: boolean
audible: boolean
autoDiscardable: boolean
discarded: boolean
favIconUrl:string
tabs
权限时才存在。如果标签页正在加载,它也可能是一个空字符串groupId: number
ID
height: number
highlighted: boolean
id: number
ID
。标签 ID
在浏览器会话中是唯一的。在某些情况下,可能不会为标签页分配 ID
;例如,当使用会话 API
查询外部标签页时,在这种情况下可能会出现会话 session ID
。对于应用程序和开发工具窗口,标签 ID
也可以设置为 chrome.tabs.TAB_ID_NONE
incognito: boolean
index: number
mutedInfo: MutedInfo
openerTabId: number
ID
(如果有)。此属性仅在 opener
标签页仍然存在时才存在pendingUrl: string
pinned: boolean
sessionId: string
API
获取的标签页的会话 sessions ID
status: TabStatus
title: string
tabs
权限时才存在。url: string
tabs
权限时才存在,如果标签页尚未提交,则该属性可能为空字符串。另请参阅 Tab.pendingUrl
width: number
windowId: number
ID
TabStatus
标签页的加载状态
unloaded
loading
complete
WindowType
窗口的类型
normal
popup
panel
app
devtools
ZoomSettings
定义如何处理标签页中的缩放更改以及在什么范围内。
defaultZoomFactor:number
tabs.getZoomSettings
时返回当前标签页的默认缩放级别。mode: ZoomSettingsMode
scope: ZoomSettingsScope
per-origin
,否则为 per-tab
。ZoomSettingsMode
定义如何处理缩放更改,即哪个实体负责页面的实际缩放;默认为自动automatic。
automatic
manual
disabled
ZoomSettingsScope
定义缩放更改是保留页面原点,还是仅在此标签页中生效;在自动模式(
automatic
)下默认为per-origin
,否则为per-tab
per-origin
per-tab
chrome.tabs
属性(Properties
)MAX_CAPTURE_VISIBLE_TAB_CALLS_PER_SECOND
每秒可以调用
captureVisibleTab
的最大次数。captureVisibleTab
开销比较高,不应过于频繁地调用
2
TAB_ID_NONE
表示缺少浏览器标签页的
ID
-1
TAB_INDEX_NONE
表示 tab_strip 中不存在制表符索引的索引。
-1
chrome.tabs
方法(Methods
)captureVisibleTab
捕获指定窗口中当前活动标签页的可见区域
要调用此方法,插件必须具有 <all_urls>
权限或 activeTab
权限。除了插件可以正常访问的站点外,此方法还允许插件捕获其他受限制的敏感站点,包括 chrome:-scheme
页面、其他插件的页面和 data: URL
。这些敏感站点只能使用 activeTab
权限进行捕获。仅当插件已被授予文件访问权限时,才可以捕获文件 URL
chrome.tabs.captureVisibleTab( windowId?: number, options?: ImageDetails, callback?: function, )
windowId: number
options: ImageDetails
callback: function
URL
。可以分配给 HTML img
元素的 src
属性以进行显示。Promise<string>
connect
连接到指定标签页中的内容脚本。
在当前插件的指定标签页中运行的每个内容脚本中都会触发 runtime.onConnect
事件
chrome.tabs.connect(
tabId: number,
connectInfo?: object,
)
tabId:number
connectInfo:object
documentId: string
documentId
标识的特定文档的端口,而不是标签页中的所有框架frameId: number
frameId
标识的特定框架frame的端口,而不是标签页中的所有框架runtime.Port
可用于与在指定标签页中运行的内容脚本进行通信的端口。如果标签页关闭或不存在,则会触发端口的 runtime.Port
事件。
create
创建一个新标签页
chrome.tabs.create( createProperties: object, callback?: function, )
createProperties: object
active: boolean
true
index: number
openerTabId: number
pinned: boolean
url: string
windowId: number
callback: function
(tab: Tab) => void
Promise<Tab>
detectLanguage
检测标签页中内容的主要语言
chrome.tabs.detectLanguage(
tabId?: number,
callback?: function,
)
tabId: number
callback: function
(language: string) => void
language: string
Promise<string>
discard
从内存中丢弃一个标签页
chrome.tabs.discard(
tabId?: number,
callback?: function,
)
tabId: number
callback: function
(tab?: Tab) => void
tab: Tab
Promise<Tab | undefined>
duplicate
复制标签页
chrome.tabs.duplicate(
tabId: number,
callback?: function,
)
tabId: number
ID
callback: function
(tab?: Tab) => void
tabs
权限,则 tabs.Tab
对象不包含 url、pendingUrl、title 和 favIconUrl
。Promise<Tab | undefined>
get
检索有关指定标签页的详细信息
chrome.tabs.get(
tabId: number,
callback?: function,
)
tabId: number
callback: function
(tab: Tab) => void
Promise<Tab>
getCurrent
获取进行此脚本调用的标签页
chrome.tabs.getCurrent(
callback?: function,
)
Promise<Tab | undefined>
getZoom
获取指定标签页的当前缩放系数
chrome.tabs.getZoom(
tabId?: number,
callback?: function,
)
Promise<number>
getZoomSettings
获取指定标签页的当前缩放设置
chrome.tabs.getZoomSettings(
tabId?: number,
callback?: function,
)
tabId: number
callback: function
(zoomSettings: ZoomSettings) => void
Promise<ZoomSettings>
goBack
如果有,请返回上一页
chrome.tabs.goBack(
tabId?: number,
callback?: function,
)
tabId: number
callback: function
() => void
Promise<void>
goForward
前进到下一页,如果有的话
chrome.tabs.goForward(
tabId?: number,
callback?: function,
)
tabId: number
callback: function
() => void
Promise<void>
group
将一个或多个标签页添加到指定的组,或者如果未指定组,则将给定的标签页添加到新创建的组。
chrome.tabs.group(
options: object,
callback?: function,
)
options: object
createProperties: object
用于创建组的配置。如果已经指定了 groupId,则不能使用
windowId: number
groupId: number
tabIds: number | [number, ...number[]]
callback: function
(groupId: number) => void
groupId: number
ID
Promise<number>
highlight
突出显示给定的标签页并关注组中的第一个。如果指定的标签页当前处于活动状态,则似乎什么都不做
chrome.tabs.highlight(
highlightInfo: object,
callback?: function,
)
(window: Window) => void
Promise<windows.Window>
move
将一个或多个标签页移动到其窗口内的新位置,或移动到新窗口。请注意,标签页只能移入和移出普通 (window.type === “normal”) 窗口
chrome.tabs.move(
tabIds: number | number[],
moveProperties: object,
callback?: function,
)
(tabs: Tab | Tab[]) => void
Promise<Tab | Tab[]>
query
获取具有指定属性的所有标签页,如果未指定属性,则获取所有标签页
chrome.tabs.query(
queryInfo: object,
callback?: function,
)
queryInfo: object
active: boolean
audible: boolean
autoDiscardable: boolean
currentWindow: boolean
discarded: boolean
groupId: number
highlighted: boolean
index: number
lastFocusedWindow: boolean
muted: boolean
pinned: boolean
status: TabStatus
title: string
url: string | string[]
windowId: number
windowType: WindowType
callback: function
(result: Tab[]) => void
Promise<Tab[]>
reload
重新加载标签页
chrome.tabs.reload(
tabId?: number,
reloadProperties?: object,
callback?: function,
)
tabId: number
() => void
Promise<void>
remove
关闭一个或多个标签页
chrome.tabs.remove(
tabIds: number | number[],
callback?: function,
)
() => void
Promise<void>
sendMessage
向指定标签页中的内容脚本发送一条消息,并在发回响应时运行可选的回调。在当前插件的指定标签页中运行的每个内容脚本中都会触发 runtime.onMessage 事件
chrome.tabs.sendMessage(
tabId: number,
message: any,
options?: object,
responseCallback?: function,
)
tabId: number
message: any
options: object
documentId: string
frameId: number
callback: function
(response: any) => void
消息处理程序发送的 JSON 响应对象。如果在连接到指定标签页时发生错误,则不带参数调用回调并将 runtime.lastError 设置为错误消息
Promise<any>
setZoom
缩放指定的标签页
chrome.tabs.setZoom(
tabId?: number,
zoomFactor: number,
callback?: function,
)
() => void
Promise<void>
setZoomSettings
设置指定标签页的缩放设置,定义如何处理缩放更改。导航标签页时,这些设置将重置为默认值。
chrome.tabs.setZoomSettings( tabId?: number, zoomSettings: ZoomSettings, callback?: function, )
() => void
Promise<void>
ungroup
从各自的组中删除一个或多个标签页。如果任何组变空,它们将被删除。
chrome.tabs.ungroup(
tabIds: number | [number, ...number[]],
callback?: function,
)
tabIds: number | [number, ...number[]]
callback: function
() => void
Promise<void>
update
修改标签页的属性。未在 updateProperties 中指定的属性不会被修改。
chrome.tabs.update(
tabId?: number,
updateProperties: object,
callback?: function,
)
Promise<Tab | undefined>
chrome.tabs
事件(Events
)onActivated
当窗口中的活动标签页更改时触发。请注意,在触发此事件时可能未设置标签页的 URL,但您可以侦听 onUpdated 事件,以便在设置 URL 时收到通知。
chrome.tabs.onActivated.addListener(
callback: function,
)
callback: function
(activeInfo: object) => void
tabId: number
ID
windowId: number
ID
onAttached
将标签页附加到窗口时激发
chrome.tabs.onAttached.addListener(
callback: function,
)
callback: function
(tabId: number, attachInfo: object) => void
tabId: number
attachInfo: object
newPosition: number
newWindowId: number
onCreated
创建标签页时触发
chrome.tabs.onCreated.addListener(
callback: function,
)
callback: function
(tab: Tab) => void
onDetached
当标签页从窗口分离时激发
chrome.tabs.onDetached.addListener(
callback: function,
)
callback: function
(tabId: number, detachInfo: object) => void
tabId: number
detachInfo: object
oldPosition: number
oldWindowId: number
onHighlighted
当窗口中突出显示或选定的标签页发生变化时触发。
chrome.tabs.onHighlighted.addListener(
callback: function,
)
callback: function
(highlightInfo: object) => void
selectInfo: object
tabIds: number[]
windowId: number
onMoved
在窗口内移动标签页时触发
chrome.tabs.onMoved.addListener(
callback: function,
)
callback: function
(tabId: number, moveInfo: object) => void
tabId: number
moveInfo: object
fromIndex: number
toIndex: number
windowId: number
onRemoved
关闭标签页时触发
chrome.tabs.onRemoved.addListener(
callback: function,
)
callback: function
(tabId: number, removeInfo: object) => void
tabId: number
removeInfo: object
isWindowClosing: boolean
True
windowId: number
onReplaced
由于预渲染或即时将标签页替换为另一个标签页时触发
chrome.tabs.onReplaced.addListener(
callback: function,
)
callback: function
(addedTabId: number, removedTabId: number) => void
addedTabId: number
removedTabId: number
onUpdated
更新标签页时触发
chrome.tabs.onUpdated.addListener(
callback: function,
)
callback: function
(tabId: number, changeInfo: object, tab: Tab) => void
tabId: number
changeInfo: object
audible: boolean
autoDiscardable: boolean
discarded: boolean
favIconUrl: string
URL
groupId: number
mutedInfo: MutedInfo
pinned: boolean
status: TabStatus
title: string
url: string
URL
tab: Tab
onZoomChange
缩放标签页时触发
chrome.tabs.onZoomChange.addListener(
callback: function,
)
callback: function
(ZoomChangeInfo: object) => void
ZoomChangeInfo: object
newZoomFactor: number
oldZoomFactor: number
tabId: number
zoomSettings: ZoomSettings
chrome.tabs API
使用示例在安装扩展程序后在新标签页中打开初始配置页面
Service Worker js
中
chrome.runtime.onInstalled.addListener(({reason}) => {
if (reason === 'install') {
chrome.tabs.create({
url: "setting.html"
});
}
});
扩展程序的 Service Worker
如何从当前聚焦的窗口
Service Worker js
中
async function getCurrentTab() {
let queryOptions = { active: true, lastFocusedWindow: true };
let [tab] = await chrome.tabs.query(queryOptions);
return tab;
}
function getCurrentTab(callback) {
let queryOptions = { active: true, lastFocusedWindow: true };
chrome.tabs.query(queryOptions, ([tab]) => {
if (chrome.runtime.lastError)
console.error(chrome.runtime.lastError);
callback(tab);
});
}
扩展程序如何切换指定标签页的静音状态
async function toggleMuteState(tabId) {
const tab = await chrome.tabs.get(tabId);
const muted = !tab.mutedInfo.muted;
await chrome.tabs.update(tabId, {muted});
console.log(`Tab ${tab.id} is ${muted ? "muted" : "unmuted"}`);
}
function toggleMuteState(tabId) {
chrome.tabs.get(tabId, async (tab) => {
let muted = !tab.mutedInfo.muted;
await chrome.tabs.update(tabId, { muted });
console.log(`Tab ${tab.id} is ${ muted ? "muted" : "unmuted" }`);
});
}
chrome.tabs.onActivated.addListener(moveToFirstPosition);
async function moveToFirstPosition(activeInfo) {
try {
await chrome.tabs.move(activeInfo.tabId, {index: 0});
console.log("Success.");
} catch (error) {
if (error == "Error: Tabs cannot be edited right now (user may be dragging a tab).") {
setTimeout(() => moveToFirstPosition(activeInfo), 50);
} else {
console.error(error);
}
}
}
function sendMessageToActiveTab(message) {
const [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
const response = await chrome.tabs.sendMessage(tab.id, message);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。