내 프로젝트에 VueJS와 Laravel을 사용하고 있습니다. 이 문제는 최근에 나타나기 시작했으며 이전 git 브랜치에서도 나타납니다.
이 오류는 Chrome 브라우저에서만 표시됩니다.
내 프로젝트에 VueJS와 Laravel을 사용하고 있습니다. 이 문제는 최근에 나타나기 시작했으며 이전 git 브랜치에서도 나타납니다.
이 오류는 Chrome 브라우저에서만 표시됩니다.
답변:
Chrome에 설치된 모든 확장 프로그램을 비활성화했습니다. 이제 오류없이 콘솔을 지 웠습니다.
이 오류의 발생을 중지하려고 여기에서 검색 한 확장 개발자 인 경우 :
문제는 아니다 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 리스너를 면밀히 검사하십시오. 그들 중 일부는 아마도 프라 미스 반환을 시작해야 할 것입니다 (비동기로 표시하면 충분할 것입니다). [@vdegenne에게 감사드립니다]
async/await
하자면 백그라운드 리스너 콜백에 사용하지 마십시오 . 이것이 저에게 실패한 것입니다 . 구조 코드 에서 구조를 제거 async
하고 변형 하여 이제 작동합니다. await
then
return true;
의 맨 아래에 추가 하는 것 뿐이며 문제가 해결되었습니다! $.ajax
이 함수 내에서 jQuery를 사용하고 있으므로이 수정이 필요합니다.
chrome : // extensions / 로 이동하면 각 확장 프로그램을 한 번에 하나씩 전환하고 어떤 확장 프로그램이 실제로 문제를 일으키는 지 확인할 수 있습니다.
확장 기능을 끄면 오류가 발생한 페이지를 새로 고치고 마우스를 움직이거나 클릭하십시오. 마우스 동작은 오류를 발생시키는 것입니다.
그래서 실제로 문제를 일으키는 확장 프로그램을 찾아내어 비활성화 할 수있었습니다.
Google Publisher Toolbar
Vivaldivivaldi://extensions
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"
]
}
return false
이 유용한 시나리오는 무엇입니까 ?
This function becomes invalid when the event listener returns, unless you return true
. 무효라는 것은 무엇을 의미합니까? 어쨌든 메시지를받을 때마다 생성된다고 생각하지 않습니까?
Chrome 73에서이 오류를 디버깅하기 위해 여기에 오는 사람들에게 한 가지 가능성은 Chrome 73 이상이 콘텐츠 스크립트에서 출처 간 요청을 허용하지 않기 때문입니다.
더 읽기 :
이는 많은 Chrome 확장 프로그램 작성자에게 영향을 미치며, Chrome은 "우리 데이터에 따르면 대부분의 확장 프로그램이이 변경 사항에 영향을받지 않을 것"이라고 생각하기 때문에 확장 프로그램을 수정하기 위해 노력해야합니다.
(앱 코드와 관련이 없음)
업데이트 : CORs 문제를 수정했지만 여전히이 오류가 표시됩니다. 나는 이것이 크롬의 잘못이라고 생각한다.
이 오류는 일반적으로 Chrome 확장 프로그램 중 하나로 인해 발생합니다.
이 One-Click Extension Disabler를 설치하는 것이 좋습니다 . 키보드 단축키 COMMAND (⌘)+ SHIFT (⇧)+ 와 함께 D사용하여 모든 확장 기능을 빠르게 비활성화 / 활성화합니다.
확장 기능이 비활성화되면이 오류 메시지가 사라집니다.
평화! ✌️
올바른 구문을 사용하고 있는지 확인하십시오.
수신 후 sendMessage () 메소드를 사용해야합니다 .
다음은 contentScript.js 의 간단한 예제입니다 . app.js에 요청 을 보냅니다 .
contentScript.js
chrome.extension.sendRequest({
title: 'giveSomeTitle', params: paramsToSend
}, function(result) {
// Do Some action
});
app.js
chrome.extension.onRequest.addListener( function(message, sender,
sendResponse) {
if(message.title === 'giveSomeTitle'){
// Do some action with message.params
sendResponse(true);
}
});
sendRequest
더 이상 사용되지 않음sendMessage
나를 위해 그것은 Auto Tab Discard
고정 된 탭에서 그 오류를 던지는 이었습니다 . https://github.com/rNeomy/auto-tab-discard/issues/101 버그 보고서를 작성했습니다 .