@@ -96,7 +96,9 @@ let BgPageInstance = (function () {
9696 } ;
9797
9898 // 往当前页面直接注入脚本,不再使用content-script的配置了
99- let _injectContentScripts = function ( tabId ) {
99+ let _injectContentScripts = function ( tabId , opts ) {
100+ opts = opts || { } ;
101+ const silent = opts . silent !== false ;
100102
101103 // FH工具脚本注入
102104 Awesome . getInstalledTools ( ) . then ( tools => {
@@ -111,6 +113,14 @@ let BgPageInstance = (function () {
111113 files : jsFiles ,
112114 func : ( names ) => { names . forEach ( n => { try { let fn = window [ n ] ; fn && fn ( ) ; } catch ( e ) { } } ) ; } ,
113115 args : [ initFuncNames ]
116+ } , ( ) => {
117+ if ( ! silent && chrome . runtime . lastError ) {
118+ console . warn ( 'inject content scripts failed:' , chrome . runtime . lastError ) ;
119+ notifyText ( {
120+ message : '内容脚本注入失败:请检查扩展“网站访问权限”(若为“点击时”,请再次点击图标触发;或将该站点设为“在所有网站上”)。' ,
121+ autoClose : 4000
122+ } ) ;
123+ }
114124 } ) ;
115125 } ) ;
116126
@@ -121,7 +131,11 @@ let BgPageInstance = (function () {
121131 // 注入js脚本
122132 list . filter ( tool => ( tools [ tool ] . contentScriptJs || tools [ tool ] . contentScript ) )
123133 . map ( tool => Awesome . getContentScript ( tool ) . then ( js => {
124- InjectTools . inject ( tabId , { js } ) ;
134+ InjectTools . inject ( tabId , { js } , ( ) => {
135+ if ( ! silent && chrome . runtime . lastError ) {
136+ console . warn ( 'inject devtool content script failed:' , chrome . runtime . lastError ) ;
137+ }
138+ } ) ;
125139 } ) ) ;
126140 } ) ;
127141 } ;
@@ -489,6 +503,35 @@ let BgPageInstance = (function () {
489503 _updateBrowserAction ( request . action , request . showTips , request . menuOnly ) ;
490504 callback && callback ( ) ;
491505 }
506+ // Popup 打开:兜底注入内容脚本(兼容 Chrome「站点访问权限=点击时」导致的注入缺失)
507+ else if ( request . type === 'fh-popup-opened' ) {
508+ chrome . tabs . query ( { active : true , currentWindow : true } , ( tabs ) => {
509+ const activeTab = tabs && tabs [ 0 ] ;
510+ const tabId = activeTab && activeTab . id ;
511+ const url = activeTab && activeTab . url ;
512+
513+ // 不可注入页面(chrome:// / edge:// / about: 等)直接提示
514+ const injectable = / ^ ( h t t p ( s ) ? | f i l e ) : \/ \/ / . test ( url || '' ) && blacklist . every ( reg => ! reg . test ( url || '' ) ) ;
515+ if ( ! tabId || ! injectable ) {
516+ notifyText ( {
517+ message : '当前页面不支持注入脚本(可能是浏览器内置页面或未授权站点)。请在普通网页中使用,或在扩展管理里为该站点放行“网站访问权限”。' ,
518+ autoClose : 3500
519+ } ) ;
520+ callback && callback ( { ok : false , reason : 'not_injectable' , url} ) ;
521+ return ;
522+ }
523+
524+ // 先注入 tabId 标记,再注入工具内容脚本
525+ InjectTools . inject ( tabId , { func : ( id ) => { window . __FH_TAB_ID__ = id ; } , args : [ tabId ] } , ( ) => {
526+ if ( chrome . runtime . lastError ) {
527+ console . warn ( 'fh-popup-opened: inject __FH_TAB_ID__ failed:' , chrome . runtime . lastError ) ;
528+ }
529+ _injectContentScripts ( tabId , { silent : false } ) ;
530+ callback && callback ( { ok : true } ) ;
531+ } ) ;
532+ } ) ;
533+ return true ;
534+ }
492535 // 截屏
493536 else if ( request . type === MSG_TYPE . CAPTURE_VISIBLE_PAGE ) {
494537 _captureVisibleTab ( callback ) ;
@@ -676,7 +719,7 @@ let BgPageInstance = (function () {
676719 if ( String ( changeInfo . status ) . toLowerCase ( ) === "complete" ) {
677720 if ( / ^ ( h t t p ( s ) ? | f i l e ) : \/ \/ / . test ( tab . url ) && blacklist . every ( reg => ! reg . test ( tab . url ) ) ) {
678721 InjectTools . inject ( tabId , { func : ( id ) => { window . __FH_TAB_ID__ = id ; } , args : [ tabId ] } ) ;
679- _injectContentScripts ( tabId ) ;
722+ _injectContentScripts ( tabId , { silent : true } ) ;
680723 }
681724 }
682725 } ) ;
@@ -1037,4 +1080,4 @@ let BgPageInstance = (function () {
10371080 } ;
10381081} ) ( ) ;
10391082
1040- BgPageInstance . init ( ) ;
1083+ BgPageInstance . init ( ) ;
0 commit comments