Я использую 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 .
В моем случае это была точка останова, установленная в моем собственном источнике страницы. Если бы я удалил или отключил точку останова, ошибка исчезла бы.
Точка останова находилась в умеренно сложном фрагменте кода рендеринга. Другие точки останова в разных частях страницы не имели такого эффекта. Мне не удалось разработать простой тестовый пример, который всегда вызывает эту ошибку.