@@ -13,9 +13,17 @@ export class ExtensionMessageSend implements MessageSend {
1313
1414 // 发送消息 注意不进行回调的内存泄漏
1515 sendMessage ( data : any ) : Promise < any > {
16- return new Promise ( ( resolve ) => {
16+ return new Promise ( ( resolve : ( ( value : any ) => void ) | null ) => {
1717 chrome . runtime . sendMessage ( data , ( resp ) => {
18- resolve ( resp ) ;
18+ const lastError = chrome . runtime . lastError ;
19+ if ( lastError ) {
20+ console . error ( "chrome.runtime.lastError in chrome.runtime.sendMessage:" , lastError ) ;
21+ // 通信API出错不回继续对话
22+ resolve = null ;
23+ return ;
24+ }
25+ resolve ! ( resp ) ;
26+ resolve = null ;
1927 } ) ;
2028 } ) ;
2129 }
@@ -25,6 +33,11 @@ export class ExtensionMessageSend implements MessageSend {
2533export class ServiceWorkerMessage extends ExtensionMessageSend implements Message {
2634 onConnect ( callback : ( data : any , con : MessageConnect ) => void ) : void {
2735 chrome . runtime . onConnect . addListener ( ( port ) => {
36+ const lastError = chrome . runtime . lastError ;
37+ if ( lastError ) {
38+ console . error ( "chrome.runtime.lastError in chrome.runtime.onConnect" , lastError ) ;
39+ // 消息API发生错误因此不继续执行
40+ }
2841 const handler = ( msg : any ) => {
2942 port . onMessage . removeListener ( handler ) ;
3043 callback ( msg , new ExtensionMessageConnect ( port ) ) ;
@@ -35,6 +48,12 @@ export class ServiceWorkerMessage extends ExtensionMessageSend implements Messag
3548
3649 onMessage ( callback : ( data : any , sendResponse : ( data : any ) => void , sender : MessageSender ) => void ) : void {
3750 chrome . runtime . onMessage . addListener ( ( msg , sender , sendResponse ) => {
51+ const lastError = chrome . runtime . lastError ;
52+ if ( lastError ) {
53+ console . error ( "chrome.runtime.lastError in chrome.runtime.onMessage:" , lastError ) ;
54+ // 消息API发生错误因此不继续执行
55+ return false ;
56+ }
3857 if ( msg . action === "messageQueue" ) {
3958 return false ;
4059 }
@@ -49,37 +68,60 @@ export class ExtensionMessage extends ExtensionMessageSend implements Message {
4968 }
5069
5170 onConnect ( callback : ( data : any , con : MessageConnect ) => void ) {
52- chrome . runtime . onConnect . addListener ( ( port ) => {
71+ chrome . runtime . onConnect . addListener ( ( port : chrome . runtime . Port | null ) => {
72+ const lastError = chrome . runtime . lastError ;
73+ if ( lastError ) {
74+ console . error ( "chrome.runtime.lastError in chrome.runtime.onConnect" , lastError ) ;
75+ // 消息API发生错误因此不继续执行
76+ }
5377 const handler = ( msg : any ) => {
54- port . onMessage . removeListener ( handler ) ;
55- callback ( msg , new ExtensionMessageConnect ( port ) ) ;
78+ port ! . onMessage . removeListener ( handler ) ;
79+ callback ( msg , new ExtensionMessageConnect ( port ! ) ) ;
80+ port = null ;
5681 } ;
57- port . onMessage . addListener ( handler ) ;
82+ port ! . onMessage . addListener ( handler ) ;
5883 } ) ;
5984
6085 if ( this . onUserScript ) {
6186 // 监听用户脚本的连接
62- chrome . runtime . onUserScriptConnect . addListener ( ( port ) => {
87+ chrome . runtime . onUserScriptConnect . addListener ( ( port : chrome . runtime . Port | null ) => {
88+ const lastError = chrome . runtime . lastError ;
89+ if ( lastError ) {
90+ console . error ( "chrome.runtime.lastError in chrome.runtime.onUserScriptConnect:" , lastError ) ;
91+ }
6392 const handler = ( msg : any ) => {
64- port . onMessage . removeListener ( handler ) ;
65- callback ( msg , new ExtensionMessageConnect ( port ) ) ;
93+ port ! . onMessage . removeListener ( handler ) ;
94+ callback ( msg , new ExtensionMessageConnect ( port ! ) ) ;
95+ port = null ;
6696 } ;
67- port . onMessage . addListener ( handler ) ;
97+ port ! . onMessage . addListener ( handler ) ;
6898 } ) ;
6999 }
70100 }
71101
72102 // 注意chrome.runtime.onMessage.addListener的回调函数需要返回true才能处理异步请求
73103 onMessage ( callback : ( data : any , sendResponse : ( data : any ) => void , sender : MessageSender ) => void ) : void {
74- chrome . runtime . onMessage . addListener ( ( msg , sender , sendResponse ) => {
104+ chrome . runtime . onMessage ?. addListener ( ( msg , sender , sendResponse ) => {
105+ const lastError = chrome . runtime . lastError ;
106+ if ( lastError ) {
107+ console . error ( "chrome.runtime.lastError in chrome.runtime.onMessage:" , lastError ) ;
108+ // 消息API发生错误因此不继续执行
109+ return false ;
110+ }
75111 if ( msg . action === "messageQueue" ) {
76112 return false ;
77113 }
78114 return callback ( msg , sendResponse , sender ) ;
79115 } ) ;
80116 if ( this . onUserScript ) {
81117 // 监听用户脚本的消息
82- chrome . runtime . onUserScriptMessage . addListener ( ( msg , sender , sendResponse ) => {
118+ chrome . runtime . onUserScriptMessage ?. addListener ( ( msg , sender , sendResponse ) => {
119+ const lastError = chrome . runtime . lastError ;
120+ if ( lastError ) {
121+ console . error ( "chrome.runtime.lastError in chrome.runtime.onUserScriptMessage:" , lastError ) ;
122+ // 消息API发生错误因此不继续执行
123+ return false ;
124+ }
83125 if ( msg . action === "messageQueue" ) {
84126 return false ;
85127 }
@@ -125,10 +167,20 @@ export class ExtensionContentMessageSend extends ExtensionMessageSend {
125167 if ( ! this . options ?. documentId || this . options ?. frameId ) {
126168 // 发送给指定的tab
127169 chrome . tabs . sendMessage ( this . tabId , data , ( resp ) => {
170+ const lastError = chrome . runtime . lastError ;
171+ if ( lastError ) {
172+ console . error ( "chrome.runtime.lastError in chrome.tabs.sendMessage:" , lastError ) ;
173+ // 无视错误继续执行
174+ }
128175 resolve ( resp ) ;
129176 } ) ;
130177 } else {
131178 chrome . tabs . sendMessage ( this . tabId , data , this . options , ( resp ) => {
179+ const lastError = chrome . runtime . lastError ;
180+ if ( lastError ) {
181+ console . error ( "chrome.runtime.lastError in chrome.tabs.sendMessage:" , lastError ) ;
182+ // 无视错误继续执行
183+ }
132184 resolve ( resp ) ;
133185 } ) ;
134186 }
0 commit comments