Я использую VueJS и Laravel для своего проекта. Эта проблема начала проявляться в последнее время и проявляется даже в старых ветках git.
Эта ошибка отображается только в браузере Chrome.
Я использую VueJS и Laravel для своего проекта. Эта проблема начала проявляться в последнее время и проявляется даже в старых ветках git.
Эта ошибка отображается только в браузере Chrome.
Ответы:
Я отключил все установленные расширения в Chrome - у меня работает. У меня теперь чистая консоль без ошибок.
Если вы разработчик расширения, который искал в Google свой путь, пытаясь остановить эту ошибку:
Проблема не в CORB, так как заблокированные COR проявляются в виде предупреждений вроде -
Блокировка чтения из разных источников (CORB) заблокировала ответ из разных источников https://www.example.com/example.html с типом MIME text / html. См. Https://www.chromestatus.com/feature/5629709824032768 для получения дополнительных сведений.
Скорее всего, проблема заключается в неправильно обработанном асинхронном ответе на runtime.sendMessage. Как говорит MDN :
Чтобы отправить асинхронный ответ, есть два варианта:
- вернуть истину из прослушивателя событий. Это сохраняет функцию sendResponse действующей после возвращения слушателя, поэтому вы можете вызвать ее позже.
- вернуть Promise из прослушивателя событий и разрешить, когда у вас есть ответ (или отклонить его в случае ошибки).
Когда вы отправляете асинхронный ответ, но не можете использовать ни один из этих механизмов, предоставленный sendResponseаргумент для sendMessageвыходит за пределы области видимости, и результат в точности соответствует сообщению об ошибке: порт вашего сообщения (устройство передачи сообщений) закрывается до того, как ответ был получили.
Авторы Webextension-polyfill уже писали об этом в июне 2018 года .
Итак, суть в том, что если вы видите, что ваше расширение вызывает эти ошибки - внимательно проверьте всех своих слушателей onMessage. Некоторым из них, вероятно, нужно начать возвращать обещания (достаточно пометить их как асинхронные). [Спасибо @vdegenne]
async/awaitдля обратного вызова фонового слушателя. Это то, что мне не удалось, я удалил asyncи преобразовал свою awaitструктуру в thenкод структуры, и теперь она работает.
return true;в конец функции chrome.runtime.onMessage.addListener (), и проблема была решена! Я использую jQuery $.ajaxвнутри этой функции, поэтому мне нужно это исправление.
Если вы перейдете к chrome: // extensions / , вы можете просто переключать каждое расширение по одному и посмотреть, какое из них действительно вызывает проблему.
Как только вы отключите расширение, обновите страницу, на которой вы видите ошибку, и пошевелите мышью, или щелкните. Действия мыши - это то, что вызывает ошибки.
Поэтому я смог определить, какое расширение на самом деле вызывает проблему, и отключить его.
Google Publisher Toolbarпри Вивальдиvivaldi://extensions
Пост довольно старый и не имеет непосредственного отношения к разработке расширений Chrome, но пусть будет здесь.
У меня была такая же проблема при ответе на сообщение в обратном вызове. Решение состоит в том, чтобы вернуть истину в прослушивателе фоновых сообщений.
Вот простой пример 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 , который отправляет сообщение во всплывающем окне . Вы будете получать исключения, пока не отмените комментарий строки «return true» в файле background.js .
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. Что значит инвалид? Разве он не должен создаваться каждый раз, когда получает сообщение?
Если причиной ошибки является расширение, используйте инкогнито Ctrl+ Shift+ N. В режиме инкогнито Chrome не имеет расширений.
UPD. Если вам нужно какое-то расширение в режиме инкогнито, например ReduxDevTools или любое другое, в настройках расширения включите «Разрешить в режиме инкогнито»
Для тех, кто приезжает сюда, чтобы отладить эту ошибку в Chrome 73, одна из возможностей заключается в том, что Chrome 73 и далее запрещает запросы из разных источников в сценариях контента.
Больше чтения:
Это влияет на многих авторов расширений Chrome, которым теперь нужно изо всех сил стараться исправить расширения, потому что Chrome думает: «Наши данные показывают, что это изменение не коснется большинства расширений».
(это не имеет ничего общего с кодом вашего приложения)
ОБНОВЛЕНИЕ : я исправил проблему с COR, но все еще вижу эту ошибку. Я подозреваю, что здесь виноват Chrome.
Эта ошибка обычно вызвана одним из ваших расширений Chrome.
Я рекомендую установить этот One-Click Extension Disabler , я использую его с сочетанием клавиш COMMAND (⌘)+ SHIFT (⇧)+ D-, чтобы быстро отключить / включить все мои расширения.
После отключения расширений это сообщение об ошибке должно исчезнуть.
Мир! ✌️
Убедитесь, что вы используете правильный синтаксис.
Мы должны использовать метод sendMessage () после его прослушивания.
Вот простой пример contentScript.js It SendRequest к 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 .
В моем случае это была точка останова, установленная в моем собственном источнике страницы. Если бы я удалил или отключил точку останова, ошибка исчезла бы.
Точка останова находилась в умеренно сложном фрагменте кода рендеринга. Другие точки останова в разных частях страницы не имели такого эффекта. Мне не удалось разработать простой тестовый пример, который всегда вызывает эту ошибку.