Я використовую VueJS та Laravel для свого проекту. Цей випуск почав з’являтися недавно, і він відображається навіть у старих гіт гет.
Ця помилка відображається лише в браузері Chrome.
Я використовую VueJS та Laravel для свого проекту. Цей випуск почав з’являтися недавно, і він відображається навіть у старих гіт гет.
Ця помилка відображається лише в браузері Chrome.
Відповіді:
Я відключив усі встановлені розширення в Chrome - працює для мене. Тепер у мене прозора консоль без помилок.
У випадку, якщо ви розробник розширень, який переглянув ваш шлях, намагаючись зупинити причину цієї помилки:
Проблема не CORB, оскільки заблоковані CORs виявляються як попередження -
Блокування перехресного походження читання (CORB) блокувало відповідь на поперечне походження https://www.example.com/example.html із текстом / html- форматом MIME. Докладнішу інформацію див. На https://www.chromestatus.com/feature/5629709824032768 .
Ця проблема, швидше за все, неправильна відповідь асинхронізації на runtime.sendMessage. Як каже MDN :
Щоб надіслати асинхронну відповідь, є два варіанти:
- повернути правду від слухача події. Це зберігає функцію sendResponse дійсною після повернення слухача, тому ви можете зателефонувати пізніше.
- повернути Обіцянку від слухача події та вирішити, коли у вас є відповідь (або відхилити її у випадку помилки).
Коли ви надсилаєте відповідь асинхронізації, але не використовуєте жоден із цих механізмів, наданий 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 , який надсилає повідомлення на спливаюче вікно. Ви отримуватимете винятки, поки не відміните коментар рядок "повернути справжню" у файл 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 вважає, що "Наші дані показують, що ці зміни не вплинуть на більшість розширень".
(це не має нічого спільного з кодом вашого додатка)
ОНОВЛЕННЯ : Я виправив проблему CORs, але все ще бачу цю помилку. Я підозрюю, що тут винна Chrome.
Ця помилка, як правило, викликана одним із ваших розширень Chrome.
Рекомендую встановити цей вимикач розширення одним клацанням , я використовую його за допомогою комбінації клавіш 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/isissue/101 .
У моєму випадку це була точка розриву, встановлена в моєму власному джерелі сторінки. Якщо я видалив або відключив точку розриву, помилка буде видалена.
Точка розриву була в помірно складному фрагменті коду візуалізації. Інші точки перерви в різних частинах сторінки не мали такого ефекту. Мені не вдалося розробити простий тестовий випадок, який завжди викликає цю помилку.