1+ import { handleError } from "./common"
2+
3+ export function getTab ( id : number ) : Promise < ChromeTab > {
4+ return new Promise ( resolve => chrome . tabs . get ( id , tab => {
5+ handleError ( "getTab" )
6+ resolve ( tab )
7+ } ) )
8+ }
9+
10+ export function createTab ( param : chrome . tabs . CreateProperties | string ) : Promise < ChromeTab > {
11+ const prop : chrome . tabs . CreateProperties = typeof param === 'string' ? { url : param } : param
12+ return new Promise ( resolve => chrome . tabs . create ( prop , tab => {
13+ handleError ( "getTab" )
14+ resolve ( tab )
15+ } ) )
16+ }
17+
18+ export function listTabs ( query ?: chrome . tabs . QueryInfo ) : Promise < ChromeTab [ ] > {
19+ query = query || { }
20+ return new Promise ( resolve => chrome . tabs . query ( query , tabs => {
21+ handleError ( "listTabs" )
22+ resolve ( tabs || [ ] )
23+ } ) )
24+ }
25+
26+ export function sendMsg2Tab < T = any , R = any > ( tabId : number , code : timer . mq . ReqCode , data : T ) : Promise < R > {
27+ const request : timer . mq . Request < T > = { code, data }
28+ return new Promise ( ( resolve , reject ) => {
29+ chrome . tabs . sendMessage < timer . mq . Request < T > , timer . mq . Response > ( tabId , request , response => {
30+ handleError ( 'sendMsgTab' )
31+ const resCode = response ?. code
32+ resCode === 'success'
33+ ? resolve ( response . data )
34+ : reject ( new Error ( response ?. msg ) )
35+ } )
36+ } )
37+ }
38+
39+ type TabHandler < Event > = ( tabId : number , ev : Event , tab ?: ChromeTab ) => void
40+
41+ export function onTabActivated ( handler : TabHandler < ChromeTabActiveInfo > ) : void {
42+ chrome . tabs . onActivated . addListener ( ( activeInfo : chrome . tabs . TabActiveInfo ) => {
43+ handleError ( "tabActivated" )
44+ handler ( activeInfo ?. tabId , activeInfo )
45+ } )
46+ }
47+
48+ export function onTabUpdated ( handler : TabHandler < ChromeTabChangeInfo > ) : void {
49+ chrome . tabs . onUpdated . addListener ( ( tabId : number , changeInfo : ChromeTabChangeInfo , tab : ChromeTab ) => {
50+ handleError ( "tabUpdated" )
51+ handler ( tabId , changeInfo , tab )
52+ } )
53+ }
0 commit comments