programing

'Unchecked runtime.lastError : The message port closed before a response was received'크롬 문제를 해결하는 방법?

nasanasas 2020. 12. 29. 07:09
반응형

'Unchecked runtime.lastError : The message port closed before a response was received'크롬 문제를 해결하는 방법?


내 프로젝트에 VueJS와 Laravel을 사용하고 있습니다. 이 문제는 최근에 나타나기 시작했으며 이전 git 브랜치에서도 나타납니다.

이 오류는 Chrome 브라우저에서만 표시됩니다.


Chrome에 설치된 모든 확장 프로그램을 비활성화했습니다. 이제 오류없이 콘솔을 지 웠습니다.


chrome : // extensions / 로 이동하면 각 확장 프로그램을 한 번에 하나씩 전환하고 어떤 확장 프로그램이 실제로 문제를 일으키는 지 확인할 수 있습니다.

확장 기능을 끄면 오류가 발생한 페이지를 새로 고치고 마우스를 움직이거나 클릭하십시오. 마우스 동작은 오류를 발생시키는 것입니다.

그래서 실제로 문제를 일으키는 확장 프로그램을 찾아내어 비활성화 할 수있었습니다.


나는에 대답 한 .

내 경우에는 문제 때문에이었다 Video Downloader professionalAdBlock

요컨대,이 문제는 일부 Google 크롬 플러그인으로 인해 발생합니다.


확장 개발자이고이 오류의 발생을 중지하려고 여기에서 검색 한 경우 :

문제는 아니다 CORB 차단 고르 같은 매니페스트 경고로 같은 -

Cross-Origin Read Blocking (CORB) 은 MIME 유형 text / html을 사용하여 출처 간 응답 https://www.example.com/example.html차단했습니다 . 자세한 내용은 https://www.chromestatus.com/feature/5629709824032768 을 참조하세요.

문제는 runtime.sendMessage에 대한 잘못 처리 된 비동기 응답 일 가능성이 높습니다. MDN는 말한다 :

비동기 응답을 보내려면 두 가지 옵션이 있습니다.

  • 이벤트 리스너에서 true를 반환합니다. 이렇게하면 리스너가 반환 된 후에도 sendResponse 함수가 유효한 상태로 유지되므로 나중에 호출 할 수 있습니다.
  • 이벤트 리스너에서 Promise를 반환하고 응답이있을 때 해결합니다 (또는 오류가 발생한 경우 거부).

비동기 응답을 보내지 만 이러한 메커니즘 중 하나를 사용하지 못하면 제공된 sendResponse인수 sendMessage가 범위를 벗어나고 결과는 오류 메시지가 말하는 것과 같습니다. 응답이 끝나기 전에 메시지 포트 (메시지 전달 장치)가 닫힙니다. 받았습니다.

Webextension-polyfill 작성자는 이미 2018 년 6 월에 이에 대해 작성했습니다 .

따라서 확장 프로그램이 이러한 오류를 일으키는 것을 확인하면 모든 onMessage 리스너를 면밀히 검사하십시오. 그들 중 일부는 아마도 프라 미스 반환을 시작해야 할 것입니다 (비동기로 표시하면 충분할 것입니다).


오류 이유가 확장자 인 경우 시크릿 Ctrl+ Shift+를 사용하십시오 N. 시크릿 모드에서 Chrome에는 확장 프로그램이 없습니다.


Post는 다소 오래되었고 Chrome 확장 프로그램 개발과 밀접한 관련이 없지만 여기에 두십시오.

콜백에서 메시지에 응답 할 때 동일한 문제가 발생했습니다. 해결책은 백그라운드 메시지 리스너에서 true 를 반환하는 입니다.

다음은 background.js의 간단한 예입니다 . popup.js의 모든 메시지에 응답합니다.

chrome.runtime.onMessage.addListener(function(rq, sender, sendResponse) {
    // setTimeout to simulate any callback (even from storage.sync)
    setTimeout(function() {
        sendResponse({status: true});
    }, 1);
    // return true;  // uncomment this line to fix error
});

다음은 팝업에 메시지를 보내는 popup.js 입니다. background.js 파일 에서 "return true"줄의 주석 처리를 해제 할 때까지 예외가 발생 합니다.

document.addEventListener("DOMContentLoaded", () => {
    chrome.extension.sendMessage({action: "ping"}, function(resp) {
        console.log(JSON.stringify(resp));
    });
});

manifest.json , 경우에 대비해 :) 알람 권한 섹션에주의하세요!

{
  "name": "TestMessages",
  "version": "0.1.0",
  "manifest_version": 2,
  "browser_action": {
    "default_popup": "src/popup.html"
  },
  "background": {
    "scripts": ["src/background.js"],
    "persistent": false
  },
  "permissions": [
    "alarms"
  ]
}

Chrome 73에서이 오류를 디버깅하기 위해 여기에 오는 사람들에게 한 가지 가능성은 Chrome 73 이상이 콘텐츠 스크립트에서 출처 간 요청을 허용하지 않기 때문입니다.

더 많은 읽기 :

  1. https://www.chromestatus.com/feature/5629709824032768
  2. https://www.chromium.org/Home/chromium-security/extension-content-script-fetches

이는 많은 Chrome 확장 프로그램 작성자에게 영향을 미치며, Chrome은 "데이터에 따르면 대부분의 확장 프로그램이이 변경 사항의 영향을받지 않을 것"이라고 생각하기 때문에 확장 프로그램을 수정하기 위해 노력해야합니다.

(앱 코드와 관련이 없음)

UPDATE: I fixed the CORs issue but I still see this error. I suspect it is Chrome's fault here.


Disable if there is any anti-virus extension is installed on the browser. In my case, the anti-virus extension was the culprit.


For me it was Auto Tab Discard, which throws that error on pinned tabs. I created a bug report, https://github.com/rNeomy/auto-tab-discard/issues/101.


In my case it was a breakpoint set in my own page source. If I removed or disabled the breakpoint then the error would clear up.

The breakpoint was in a moderately complex chunk of rendering code. Other breakpoints in different parts of the page had no such effect. I was not able to work out a simple test case that always trigger this error.


I was sending console log data from one tab to another and did not really needed the first console. However the error message did bug me so I right clicked and selected "don't show messages from x website". Maybe this is the easiest fix:)

ReferenceURL : https://stackoverflow.com/questions/54126343/how-to-fix-unchecked-runtime-lasterror-the-message-port-closed-before-a-respon

반응형