@@ -38,6 +38,8 @@ const TEMPLATES_DIR = 'MoyTemplates'
3838const MEDIA_DOMAINS = [ 'youtube.com' , 'youtu.be' , 'ytimg.com' , 'googlevideo.com' , 'vimeo.com' , 'vimeocdn.com' ,
3939 'lj-toys.com' , '9cache.com' ]
4040const ORIGINAL_LOOK_NAME = 'Original look'
41+ const PAGE_ACTION_URL_PROTOCOLS = [ 'http:' , 'https:' ]
42+ const PAGE_ACTION_BANNED_URLS = [ 'https://addons.mozilla.org' , 'https://chrome.google.com/webstore' ]
4143
4244const AUX_CONTENT_SCRIPTS = [ '/lib/handlebars.min.js' , '/lib/jquery.slim.min.js' , '/src/moyparser.js' ]
4345const MAIN_CONTENT_SCRIPT = '/src/cs.js'
@@ -243,6 +245,25 @@ function onDOMContentLoaded(details) {
243245 }
244246}
245247
248+ function switchPageAction ( tabId , url ) {
249+ if ( 0 > tabId && ! url ) {
250+ return
251+ }
252+ const isProtocolOk = PAGE_ACTION_URL_PROTOCOLS . includes ( new URL ( url ) . protocol )
253+ const isUrlBanned = PAGE_ACTION_BANNED_URLS . find ( u => url . startsWith ( u ) )
254+ if ( isProtocolOk && ! isUrlBanned ) {
255+ browser . pageAction . show ( tabId )
256+ } else {
257+ browser . pageAction . hide ( tabId )
258+ }
259+ }
260+
261+ function onTabUpdated ( tabId , changeInfo ) {
262+ if ( changeInfo . url ) {
263+ switchPageAction ( tabId , changeInfo . url )
264+ }
265+ }
266+
246267function onTabRemoved ( tabId , removeInfo ) {
247268 state . tabBindings . delete ( tabId )
248269}
@@ -255,6 +276,11 @@ function onTabReplaced(addedTabId, removedTabId) {
255276 onTabRemoved ( removedTabId , null )
256277}
257278
279+ async function initTabs ( ) {
280+ const tabs = await browser . tabs . query ( { } )
281+ tabs . forEach ( tab => switchPageAction ( tab . id , tab . url ) )
282+ }
283+
258284async function injectFrame ( tab ) {
259285 await browser . tabs . executeScript ( tab . id , { file : POLYFILL_CONTENT_SCRIPT } )
260286 await browser . tabs . executeScript ( tab . id , { file : FRAME_INJECTOR_SCRIPT } )
@@ -364,7 +390,11 @@ periodicDataRefresh()
364390
365391browser . webRequest . onBeforeRequest . addListener ( onBeforeRequest , { urls : [ '*://*/*' ] } , [ 'blocking' ] )
366392browser . webNavigation . onDOMContentLoaded . addListener ( onDOMContentLoaded , { url : [ { urlMatches : '.*' } ] } )
367- browser . tabs . onRemoved . addListener ( onTabRemoved )
368- browser . tabs . onReplaced . addListener ( onTabReplaced )
369393browser . pageAction . onClicked . addListener ( onIconClicked )
370394browser . runtime . onMessage . addListener ( onMessage )
395+
396+ browser . tabs . onRemoved . addListener ( onTabRemoved )
397+ browser . tabs . onReplaced . addListener ( onTabReplaced )
398+ browser . tabs . onUpdated . addListener ( onTabUpdated )
399+
400+ initTabs ( ) . catch ( e => console . log ( 'Failed to init tabs' , e ) )
0 commit comments