내 프로젝트에 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하고 변형 하여 이제 작동합니다. awaitthen
return true;의 맨 아래에 추가 하는 것 뿐이며 문제가 해결되었습니다! $.ajax이 함수 내에서 jQuery를 사용하고 있으므로이 수정이 필요합니다.
chrome : // extensions / 로 이동하면 각 확장 프로그램을 한 번에 하나씩 전환하고 어떤 확장 프로그램이 실제로 문제를 일으키는 지 확인할 수 있습니다.
확장 기능을 끄면 오류가 발생한 페이지를 새로 고치고 마우스를 움직이거나 클릭하십시오. 마우스 동작은 오류를 발생시키는 것입니다.
그래서 실제로 문제를 일으키는 확장 프로그램을 찾아내어 비활성화 할 수있었습니다.
Google Publisher ToolbarVivaldivivaldi://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 버그 보고서를 작성했습니다 .