Chrome插件开发【windows】
目录
前言
windows方法
chrome.windows.create()
chrome.windows.getCurrent()
chrome.windows.get()
chrome.windows.getLastFocused()
chrome.windows.getAll()
chrome.windows.update()
chrome.windows.remove()
windows事件
chrome.windows.onCreated
chrome.windows.onRemoved
chrome.windows.onFocusChanged
chrome.windows.onBoundsChanged
window对象
其它
前言
本文基于Chrome插件V3版本讲解
chrome.windows API提供了与浏览器窗口交互的完整能力。
浏览器窗口与浏览器标签页不是一个概念,简单来说:“一个窗口可以包含多个标签页”
具体包括:
- 创建窗口
- 关闭窗口
- 修改窗口
- 查询窗口
- 监听窗口
windows方法
所有方法的回调结果均支持:
- 回调函数:callback
- Promise:“.then”和“.catch”
chrome.windows.create()
创建新的浏览器窗口
语法:
// 创建新的浏览器窗口
chrome.windows.create(createData,(window) => {})
// 或
chrome.windows.create(createData).then().catch()
参数:
- createData(必填):配置新窗口的属性
- 类型:Object
- 对象属性:
- url:String | Array,窗口打开的URL | 窗口打开多个标签页多个URL
- type:窗口类型,(normal | popup | panel | detached_panel),默认normal
- left/top:窗口左上角坐标,单位PX
- width/height:窗口宽高,单位整数
- state:窗口大小,(normal | maximized | minimized | fullscreen),默认normal
- incognito:布尔值,窗口处于“激活” | “未激活”状态
- callback(选填):callback只有一个参数(window)
- window:新窗口对象
示例:
// 创建一个带有两个浏览器标签的窗口
chrome.windows.create({url:['https://www.baidu.com','https://www.baidu.com'],type:'normal',
}).then(window => {console.log(window)
})
效果:
chrome.windows.getCurrent()
获取当前窗口(调用该API的扩展页面所在的窗口),如果是在background.js中调用:
返回插件发生“运行” | “更新” | “安装” | “卸载”操作的窗口
语法:
// 获取窗口
chrome.windows.getCurrent(getInfo,(window) => {})
// 或
chrome.windows.getCurrent(getInfo).then().catch()
参数:
- getInfo(选填):配置获取信息
- 类型:Object
- getInfo参数:
- populate:布尔值,若为true,返回的windows对象会包含tabs字段。否则,不包含tabs字段。tabs字段就是标签页数组
- windowTypes:Array,筛选窗口类型,仅当窗口类型匹配数组中的值时才返回。(normal | popup | panel | detached_panel)
- callback(选填):callback只有一个参数(window)
- window:查询到的窗口对象
chrome.windows.get()
获取指定窗口ID的窗口详情
语法:
// 根据窗口ID获取窗口信息
chrome.windows.get(windId,getInfo,(window) => {})
// 或
chrome.windows.get(windId,getInfo).then((windowId) => {}).catch()
参数:
- windowId(必填):窗口的ID
- 类型:Number
- getInfo(选填):配置返回信息
- 类型:Object
- getInfo参数:
- populate:布尔值,若为true,返回的windows对象会包含tabs字段。否则,不包含tabs字段。tabs字段就是标签页数组
- windowTypes:Array,筛选窗口类型,仅当窗口类型匹配数组中的值时才返回。(normal | popup | panel | detached_panel)
- callback(选填):callback只有一个参数(window)
- window:查询到的窗口对象
示例:
// 获取当前窗口的信息
// 就是绕了一个大弯,算是锻炼使用了
// 先获取当前窗口ID
chrome.windows.getCurrent((window) => {// 再查看当前窗口信息chrome.windows.get(window.id,(windowExtra) => {console.log(windowExtra);})
})
chrome.windows.getLastFocused()
获取最后获得焦点的窗口
语法:
// 获取最后一个获得焦点的窗口
chrome.windows.getLastFocused(getInfo,(window) => {})
参数:
- getInfo(选填):配置返回信息
- 类型:Object
- getInfo参数:
- populate:布尔值,若为true,返回的windows对象会包含tabs字段。否则,不包含tabs字段。tabs字段就是标签页数组
- windowTypes:Array,筛选窗口类型,仅当窗口类型匹配数组中的值时才返回。(normal | popup | panel | detached_panel)
- callback(选填):callback只有一个参数(window)
- window:查询到的窗口对象
chrome.windows.getAll()
获取所有窗口的列表
语法:
// 获取所有窗口
chrome.windows.getAll(getInfo,(windows) => {})
参数:
- getInfo(选填):配置返回信息
- 类型:Object
- getInfo参数:
- populate:布尔值,若为true,返回的windows对象会包含tabs字段。否则,不包含tabs字段。tabs字段就是标签页数组
- windowTypes:Array,筛选窗口类型,仅当窗口类型匹配数组中的值时才返回。(normal | popup | panel | detached_panel)
- callback(选填):callback只有一个参数(window)
- window:查询到的窗口对象
chrome.windows.update()
更新窗口的属性(大小、位置、状态)
语法:
// 更新窗口
chrome.windows.update(windowId,updateInfo,(window) => {})
参数:
- windowId(必填):窗口ID
- 类型:Number
- updateInfo(必填):更新内容
- 类型:Object
- updateInfo参数:
- left:Number,窗口左上角的水平坐标(px),需配合top使用
- top:Number,窗口左上角的垂直坐标(px),需配合left使用
- width:Number,窗口宽度
- height:Number,窗口高度
- state:String,窗口状态(normal | maximized | minimized | fullscreen)
- focused:布尔值,若为true,窗口获得焦点;反之
- drawAttention:布尔值,若为true,会通过闪烁任务栏图标等方式提醒用户注意该窗口(部分平台不支持)
- incognito:布尔值,仅对已隐藏窗口有效
- callback(选填):只有一个参数(window)
- window:更新后的window对象
示例:
// 更新窗口
chrome.windows.getCurrent((window) => {chrome.windows.update(window.id,{focused: true,drawAttention:true},(newWindow) => {console.log(newWindow)})
})
效果:
任务栏图标真的有在闪烁!
chrome.windows.remove()
关闭指定窗口(包含窗口下的鄋标签页)
语法:
// 删除窗口
chrome.windows.remove(windowId,(window) => {})
参数:
- windowId(必填):窗口的ID
- 类型:Number
- callback(选填):callback没有参数
windows事件
用于监听窗口的变化
chrome.windows.onCreated
监听窗口创建
语法:
// 监听窗口创建
chrome.windows.onCreated.addListener(window => {})
参数:
- window:新创建的window对象
chrome.windows.onRemoved
监听窗口关闭
语法:
// 监听窗口删除
chrome.windows.onRemoved.addListener((windowId) => {})
参数:
- windowId:关闭的window窗口ID
chrome.windows.onFocusChanged
监听窗口焦点
语法:
// 监听窗口焦点
chrome.windows.onFocusChanged.addListener((windowId) => {})
参数:
- windowId:发生变化的窗口ID,如果所有窗口都没有焦点返回“-1”
chrome.windows.onBoundsChanged
监听窗口位置或大小变化
语法:
// 监听窗口删除
chrome.windows.onBoundsChanged.addListener((windowId, bounds) => {});
参数:
- windowId:变化窗口的ID
- bounds:新的边界位置({left,top,width,height})
window对象
一个window对象有10个属性:
- alwaysOnTop:布尔值,表示窗口是否开启“置顶”状态
- focused:布尔值,表示窗口当前是否处于“获得焦点”状态
- height:窗口的高度,单位是px
- id:Number,窗口的唯一标识符
- incognito:布尔值,表示窗口是否处于“隐身模式”
- left:窗口左上角相对于屏幕左侧的水平距离,单位是px
- state:String,窗口的状态(normal | maximized | minimized | fullscreen)
- top:窗口左上角相对于屏幕顶部的垂直距离,单位是px
- type:String,窗口的类型(normal | popup)
- width:窗口的宽度,单位是px
其它
更多Chrome插件学习,可以参考我的专栏:
Chrome插件_是洋洋a的博客-CSDN博客