"청취자가 true를 반환하여 비동기 응답을 나타냈지만 응답이 수신되기 전에 메시지 채널이 닫혔습니다." 무슨 의미입니까?
저는 리액트 어플리케이션을 만들고 있는데, 그 중 하나를 직접 만들어야 하는 npm 모듈을 사용하고 있습니다.(내 NPM 패키지: https://www.npmjs.com/package/modale-react-rm).
닫힙니다.useState().
패키지를 Import한 후 콘솔에 몇 초 후에 아무런 조작도 하지 않고 갑자기 오류가 나타납니다.
Uncaught (in promise) localhost/:1
>{message: 'A listener indicated an asynchronous response by r…age channel closed before a response was received'}
message: "A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received"
>[[Prototype]]: Object
>constructor: ƒ ()
>[[Prototype]]: Object
/* sometimes there are specific elements in addition but I could not check when they appear and when not */
Promise.then (asynchrone)
(anonyme) @content_script_bundle.js:108
handleNewFeatures @content_script_bundle.js:101
handleUpdatedNodes @content_script_bundle.js:101
(anonyme) @content_script_bundle.js:101
childlist(asynchrone)
0 @purplebox.js:1
(anonyme) @purplebox.js:1
v @purplebox.js:1
내 페이지를 차단하거나 기능이 제대로 작동하지 않는 것은 아니지만, 오류이기 때문에 수정하고 같은 문제를 겪고 있는 다른 사람에게 도움이 될 수 있다고 생각합니다.
이 프로젝트에서는 비동기 요청을 하지 않도록 지정합니다.모든 것이 로컬이며 사용하는 몇 가지 데이터는 raw로 직접 Import됩니다.나도 Purplebox.js가 어디서 왔는지 몰라.
이 문제는 크로스 오리진 요청 문제로 다양한 Chrome Extensions에 의해 발생합니다.저도 Angular 앱에서 사용하고 있었는데, 인식 불능 모드로 테스트한 결과 오류가 나타나지 않았습니다.
: /: /Edit: " " " 개자자의의의 /" :return true상호 참조에서 데이터를 가져올 때 사용합니다.상세 정보:크롬 프로젝트
이 경우 Ghostery 확장이 원인입니다.로컬 호스트에 이 오류가 나타나면 Ghostery의 신뢰할 수 있는 사이트 목록에 추가해야 오류가 사라집니다.
Ghostery를 포함한 많은 확장자가 사용하는 라이브러리에서 논의되었습니다.최근 크롬에서 에러 메시지가 나타난 변경이 있었습니다.
폴리필을 사용하는 프로젝트의 경우 수정이 병합되면 경고가 사라집니다.파이어폭스만이 새로운 약속 기반 runtime.onMessage를 구현하고 Chrome은 원래의 콜백 스타일 API를 적용하므로 polyfill 라이브러리가 사용됩니다.
webextension-polyfill 라이브러리에 이미 열린 풀 요청이 있습니다.합병은 되지 않았지만, 테스트 결과 문제가 해결되었습니다.따라서 라이브러리를 내부적으로 사용하는 프로젝트의 빠른 수정이 필요한 경우 패치 패키지가 포함된 패치를 수동으로 적용할 수 있습니다.예를 들어, Ghostery의 이러한 변화는 이렇게 보입니다.
백그라운드 스크립트(MV3의 서비스 워커)가 콘텐츠스크립트로부터 수신한 메시지에 대한 응답을 반환하지 않고 비활성 상태가 될 수 있습니다.
예:
백그라운드 스크립트:
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
// ... handle message
return true // Error message says you already return true
})
대부분의 MV3 API는 비동기식이며 적절한 경우에 약속을 반환할 수 있습니다(예: chrome.tabs.onRemoved) 이벤트 청취자(예: chrome.tabs.onRemoved)와 같이 약속을 반환하는 것은 의미가 없습니다).그러나 응답 읽기는 콜백 또는 약속 스타일을 사용하여 수행할 수 있습니다.
콘텐츠 스크립트: 응답 읽기 방법 1:
chrome.runtime.sendMessage('ping', (response) => { /* read response */ })
콘텐츠 스크립트: 응답 읽기 방법 2:
chrome.runtime.sendMessage('ping').then(response => { /* read response */ })
현재 직면하고 있는 문제는 백그라운드스크립트가 기동하지 않는 것입니다.sendResponse()하나 이상의 메시지를 수신하여 비활성화된 경우(메시지 채널이 닫힙니다).그러나 메시지를 보낸 내용 스크립트가 응답을 기다리고 있습니다.
메시지 발신자와 핸들러를 확인해 주세요.
저도 같은 실수를 했어요.Tampermonkey 확장자를 삭제하고 AdBlock 확장자를 수정하면 효과가 있었습니다.
며칠 전에도 같은 문제가 발생했는데, 오류의 원인이 background.js에 있다는 것을 알게 되었습니다.
런타임 메시지 핸들러에 의해 발생합니다.이 문제를 해결하려면 crome.runtime.onMessage.addListener에 콜백 함수로 세 번째 파라미터를 추가합니다.
어떻게 해결책을 찾았는지는 잊었지만 내겐 효과가 있어
// to avoid the error, the parameter [sendResponse] is necessary!
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
// do something ...
// this line seems meaningless but you have to invoke it to avoid error.
sendResponse({damn: true});
});
리액트 앱에서도 useEffect를 통해 무한 루프를 도입했을 때와 같은 에러가 발생했는데, 앱의 변화나 문제는 거의 발생하지 않을 것입니다.아직 작성해야 할 기능의 상태를 새로고침하는 데 도움이 되기도 했지만 시간이 지남에 따라 버그와 성능 문제가 발생합니다.
Avast Online Security & Privacy 22.11.173에서도 같은 문제가 발생하고 있습니다.
이 오류는 광고 차단 등과 관련이 있습니다.이 어플리케이션의 사이트를 제외해 주세요.저 같은 경우에는 애드블록 앱이었어요.LiveServer 또는 FiveServer에서 작업할 때 콘솔에 이 오류가 계속 표시됩니다.아무 영향도 없지만 매우 귀찮다
나도 같은 실수를 했다.여기서 클래스 구성 요소가 디스플레이에 응답을 표시하지 않았습니다.
해결 방법: "rendor" => ~"rendor"~의 철자에 구문 오류가 있습니다.
언급URL : https://stackoverflow.com/questions/72494154/a-listener-indicated-an-asynchronous-response-by-returning-true-but-the-messag
'codememo' 카테고리의 다른 글
| AngularJS 드롭다운 필수 유효성 검사 (0) | 2023.02.16 |
|---|---|
| angularjs의 ng-bind 필터를 사용한 후 텍스트 추가 (0) | 2023.02.16 |
| Oracle에서 여러 행을 콤마 구분 목록으로 결합하려면 어떻게 해야 합니까? (0) | 2023.02.12 |
| Angular.js: .value()는 앱 전체 상수를 설정하고 컨트롤러에서 이를 검색하는 적절한 방법입니까? (0) | 2023.02.12 |
| Wordpress WooCommerce StoreFront 헤더 스타일 제거 (0) | 2023.02.12 |

