W moim projekcie używam VueJS i Laravel. Ten problem zaczął się ostatnio pojawiać i pojawia się nawet w starych gałęziach git.
Ten błąd pojawia się tylko w przeglądarce Chrome.
W moim projekcie używam VueJS i Laravel. Ten problem zaczął się ostatnio pojawiać i pojawia się nawet w starych gałęziach git.
Ten błąd pojawia się tylko w przeglądarce Chrome.
Odpowiedzi:
Wyłączyłem wszystkie zainstalowane rozszerzenia w Chrome - działa dla mnie. Mam teraz czystą konsolę bez błędów.
Jeśli jesteś programistą rozszerzeń, który przeszukał Cię tutaj, próbując przestać powodować ten błąd:
Problem nie dotyczy CORB, ponieważ zablokowane COR manifestują się jako ostrzeżenia, takie jak -
Cross-Origin Read Blocking (CORB) zablokował odpowiedź między źródłami https://www.example.com/example.html z typem MIME text / html. Więcej informacji można znaleźć pod adresem https://www.chromestatus.com/feature/5629709824032768 .
Problem jest najprawdopodobniej błędną odpowiedzią asynchroniczną na runtime.sendMessage. Jak mówi MDN :
Aby wysłać odpowiedź asynchroniczną, istnieją dwie opcje:
- zwraca prawdę z detektora zdarzeń. Dzięki temu funkcja sendResponse zachowuje ważność po powrocie odbiornika, dzięki czemu można ją później wywołać.
- zwróć Obietnicę od nasłuchiwania zdarzeń i rozwiąż ją, gdy otrzymasz odpowiedź (lub odrzuć ją w przypadku błędu).
Gdy wyślesz odpowiedź asynchroniczną, ale nie użyjesz żadnego z tych mechanizmów, dostarczony sendResponse
argument sendMessage
wykracza poza zakres, a wynik jest dokładnie taki, jak mówi komunikat o błędzie: twój port komunikatów (urządzenie do przekazywania komunikatów) jest zamykany przed odpowiedzią Odebrane.
Autorzy Webextension-polyfill pisali już o tym w czerwcu 2018 roku .
Podsumowując, jeśli zauważysz, że rozszerzenie powoduje te błędy - przyjrzyj się uważnie wszystkim odbiornikom onMessage. Część z nich prawdopodobnie będzie musiała zacząć zwracać obietnice (wystarczy oznaczyć je jako asynchroniczne). [Dzięki @vdegenne]
async/await
do oddzwaniania słuchacza w tle. To mi się nie udało, usunąłem async
i przekształciłem swoją await
strukturę w then
kod struktury i teraz działa.
return true;
na dole mojej funkcji chrome.runtime.onMessage.addListener () i problem został rozwiązany! Używam jQuery $.ajax
wewnątrz tej funkcji, dlatego potrzebuję tej poprawki.
Jeśli przejdziesz do chrome: // extensions / , możesz po prostu przełączać każde rozszerzenie pojedynczo i zobaczyć, które faktycznie powoduje problem.
Po wyłączeniu rozszerzenia odśwież stronę, na której widzisz błąd i poruszaj myszą lub kliknij. Działania myszy to rzeczy, które generują błędy.
Dzięki temu mogłem określić, które rozszerzenie faktycznie powoduje problem i wyłączyć go.
Google Publisher Toolbar
pod Vivaldivivaldi://extensions
Post jest dość stary i nie jest ściśle związany z rozwojem rozszerzeń Chrome, ale niech tu będzie.
Miałem ten sam problem podczas odpowiadania na wiadomość w oddzwonieniu. Rozwiązaniem jest zwrócenie wartości true w odbiorniku komunikatów w tle.
Oto prosty przykład background.js . Odpowiada na każdą wiadomość z pliku 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
});
Oto popup.js , który wysyła wiadomość w wyskakującym okienku. Będziesz otrzymywać wyjątki, dopóki nie usuniesz komentarza w wierszu „return true” w pliku background.js .
document.addEventListener("DOMContentLoaded", () => {
chrome.extension.sendMessage({action: "ping"}, function(resp) {
console.log(JSON.stringify(resp));
});
});
manifest.json , na wszelki wypadek :) Zwróć uwagę na sekcję uprawnień do alarmów!
{
"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
byłby przydatny?
This function becomes invalid when the event listener returns, unless you return true
. Co oznacza nieważny? czyż nie ma być tworzona za każdym razem, gdy otrzyma wiadomość?
Dla tych, którzy przyjeżdżają tutaj, aby debugować ten błąd w Chrome 73, jedną z możliwości jest to, że Chrome 73 od wersji nie zezwala na żądania cross-origin w skryptach zawartości.
Więcej do czytania:
Ma to wpływ na wielu autorów rozszerzeń Chrome, którzy teraz muszą próbować naprawić rozszerzenia, ponieważ Chrome uważa, że „Nasze dane pokazują, że większość rozszerzeń nie zostanie dotknięta tą zmianą”.
(nie ma to nic wspólnego z kodem aplikacji)
AKTUALIZACJA : naprawiłem problem z COR, ale nadal widzę ten błąd. Podejrzewam, że to wina Chrome'a.
Ten błąd jest zwykle spowodowany przez jedno z rozszerzeń Chrome.
Zalecam zainstalowanie tego wyłącznika rozszerzeń jednym kliknięciem , używam go ze skrótem klawiaturowym COMMAND (⌘)+ SHIFT (⇧)+ D-, aby szybko wyłączyć / włączyć wszystkie moje rozszerzenia.
Po wyłączeniu rozszerzeń ten komunikat o błędzie powinien zniknąć.
Pokój! ✌️
Upewnij się, że używasz poprawnej składni.
Po wysłuchaniu powinniśmy użyć metody sendMessage () .
Oto prosty przykład contentScript.js It sendRequest do 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
jest przestarzałe użyciesendMessage
U mnie to było Auto Tab Discard
, co wyrzuca ten błąd na przypięte zakładki. Utworzyłem raport o błędzie, https://github.com/rNeomy/auto-tab-discard/issues/101 .
W moim przypadku był to punkt przerwania ustawiony w moim własnym źródle strony. Gdybym usunął lub wyłączył punkt przerwania, błąd zniknąłby.
Punkt przerwania znajdował się w umiarkowanie złożonym fragmencie kodu renderującego. Inne punkty przerwania w różnych częściach strony nie miały takiego efektu. Nie udało mi się opracować prostego przypadku testowego, który zawsze wywołuje ten błąd.