Tôi đang sử dụng VueJS và Laravel cho dự án của mình. Vấn đề này bắt đầu hiển thị gần đây và nó hiển thị ngay cả trong các nhánh git cũ.
Lỗi này chỉ hiển thị trong trình duyệt Chrome.
Tôi đang sử dụng VueJS và Laravel cho dự án của mình. Vấn đề này bắt đầu hiển thị gần đây và nó hiển thị ngay cả trong các nhánh git cũ.
Lỗi này chỉ hiển thị trong trình duyệt Chrome.
Câu trả lời:
Tôi đã tắt tất cả các tiện ích mở rộng đã cài đặt trong Chrome - hoạt động với tôi. Bây giờ tôi đã xóa giao diện điều khiển mà không có lỗi.
Trong trường hợp bạn là nhà phát triển tiện ích mở rộng theo cách của bạn ở đây đang cố gắng ngăn chặn lỗi này:
Vấn đề không phải là CORB, vì các COR bị chặn biểu hiện như các cảnh báo như -
Chặn đọc chéo nguồn gốc (CORB) đã chặn phản hồi nguồn gốc chéo https://www.example.com/example.html với văn bản / html loại MIME. Xem https://www.chromestatus.com/feature/5629709824032768 để biết thêm chi tiết.
Vấn đề rất có thể là một phản ứng không đồng bộ được xử lý sai cho runtime.sendMessage. Như MDN nói :
Để gửi phản hồi không đồng bộ, có hai tùy chọn:
- trả lại đúng từ người nghe sự kiện. Điều này giữ cho hàm sendResponse hợp lệ sau khi người nghe trả về, vì vậy bạn có thể gọi nó sau.
- trả lại một Promise từ người nghe sự kiện và giải quyết khi bạn có phản hồi (hoặc từ chối nó trong trường hợp có lỗi).
Khi bạn gửi phản hồi không đồng bộ nhưng không sử dụng một trong hai cơ chế này, sendResponse
đối số được cung cấp sendMessage
sẽ vượt ra ngoài phạm vi và kết quả chính xác như thông báo lỗi cho biết: cổng thông báo của bạn (thiết bị chuyển tin nhắn) bị đóng trước khi phản hồi nhận.
Các tác giả webextension-polyfill đã viết về nó vào tháng 6 năm 2018 .
Vì vậy, điểm mấu chốt, nếu bạn thấy tiện ích mở rộng của mình gây ra các lỗi này - hãy kiểm tra chặt chẽ tất cả các trình nghe onMessage của bạn. Một số trong số họ có thể cần phải bắt đầu trả lại lời hứa (đánh dấu chúng là không đồng bộ là đủ). [Cảm ơn @vdegenne]
async/await
cho cuộc gọi lại người nghe nền của bạn. Đây là những gì thất bại đối với tôi, tôi đã loại bỏ async
và chuyển đổi await
cấu trúc của mình trong một then
mã cấu trúc và bây giờ nó hoạt động.
return true;
vào dưới cùng của hàm chrome.r Yoon.onMessage.addListener () và vấn đề đã được giải quyết! Tôi đang sử dụng jQuery $.ajax
bên trong chức năng này, đó là lý do tại sao tôi cần sửa lỗi này.
Nếu bạn truy cập chrome: // extend / , bạn chỉ có thể bật từng tiện ích mở rộng một lần và xem cái nào thực sự gây ra vấn đề.
Khi bạn tắt tiện ích mở rộng, hãy làm mới trang mà bạn đang thấy lỗi và vẫy chuột xung quanh hoặc nhấp. Hành động của chuột là những thứ đang ném lỗi.
Vì vậy, tôi đã có thể xác định chính xác phần mở rộng nào thực sự gây ra sự cố và vô hiệu hóa nó.
Google Publisher Toolbar
dưới thời Vivaldivivaldi://extensions
Bài đăng khá cũ và không liên quan chặt chẽ đến việc phát triển tiện ích mở rộng của Chrome, nhưng hãy để nó ở đây.
Tôi gặp vấn đề tương tự khi trả lời tin nhắn trong cuộc gọi lại. Giải pháp là trả về true trong trình nghe tin nhắn nền.
Đây là ví dụ đơn giản về background.js . Nó trả lời bất kỳ tin nhắn nào từ 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
});
Đây là popup.js , sẽ gửi tin nhắn trên popup. Bạn sẽ nhận được các ngoại lệ cho đến khi bạn bỏ bình luận dòng "return true" trong tệp background.js .
document.addEventListener("DOMContentLoaded", () => {
chrome.extension.sendMessage({action: "ping"}, function(resp) {
console.log(JSON.stringify(resp));
});
});
manifest.json , chỉ trong trường hợp :) Hãy chú ý vào phần quyền báo động!
{
"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
sẽ hữu ích?
This function becomes invalid when the event listener returns, unless you return true
. Điều gì có nghĩa là không hợp lệ? không phải nó sẽ được tạo ra mỗi khi nó nhận được tin nhắn sao?
Nếu lý do lỗi là tiện ích mở rộng, hãy sử dụng ẩn danh Ctrl+ Shift+ N. Ở chế độ ẩn danh, Chrome không có tiện ích mở rộng.
CẬP NHẬT. Nếu bạn cần một số tiện ích mở rộng trong chế độ ẩn danh, ví dụ ReduxDevTools hoặc bất kỳ tiện ích nào khác, trong cài đặt tiện ích mở rộng sẽ bật "Cho phép trong ẩn danh"
Đối với những người đến đây để gỡ lỗi lỗi này trong Chrome 73, một khả năng là do Chrome 73 trở đi không cho phép các yêu cầu xuất xứ chéo trong các tập lệnh nội dung.
Đọc thêm:
Điều này ảnh hưởng đến nhiều tác giả tiện ích mở rộng của Chrome, những người hiện cần phải tranh giành để sửa các tiện ích mở rộng vì Chrome cho rằng "Dữ liệu của chúng tôi cho thấy hầu hết các tiện ích mở rộng sẽ không bị ảnh hưởng bởi thay đổi này".
(nó không có gì để làm với mã ứng dụng của bạn)
CẬP NHẬT : Tôi đã sửa lỗi CORs nhưng tôi vẫn thấy lỗi này. Tôi nghi ngờ đó là lỗi của Chrome ở đây.
Lỗi này thường do một trong các tiện ích mở rộng Chrome của bạn gây ra.
Tôi khuyên bạn nên cài đặt Trình mở rộng tiện ích một lần nhấp này , tôi sử dụng nó với phím tắt COMMAND (⌘)+ SHIFT (⇧)+ D- để nhanh chóng vô hiệu hóa / bật tất cả các tiện ích mở rộng của mình.
Khi các tiện ích mở rộng bị vô hiệu hóa, thông báo lỗi này sẽ biến mất.
Sự thanh bình! ✌️
Hãy chắc chắn rằng bạn đang sử dụng đúng cú pháp.
Chúng ta nên sử dụng phương thức sendMessage () sau khi nghe nó.
Dưới đây là một ví dụ đơn giản của contentScript.js Nó 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);
}
});
Đối với tôi Auto Tab Discard
, đó là lỗi ném vào các tab được ghim. Tôi đã tạo một báo cáo lỗi, https://github.com/rNeomy/auto-tab-discard/issues/101 .
Trong trường hợp của tôi, đó là một điểm dừng được đặt trong nguồn trang của riêng tôi. Nếu tôi loại bỏ hoặc vô hiệu hóa điểm dừng thì lỗi sẽ rõ ràng.
Điểm dừng là một đoạn mã kết xuất phức tạp vừa phải. Các điểm dừng khác trong các phần khác nhau của trang không có hiệu ứng như vậy. Tôi đã không thể tìm ra một trường hợp thử nghiệm đơn giản luôn gây ra lỗi này.
Tôi đã gửi dữ liệu nhật ký giao diện điều khiển từ tab này sang tab khác và không thực sự cần giao diện điều khiển đầu tiên. Tuy nhiên, thông báo lỗi đã làm tôi gặp lỗi vì vậy tôi đã nhấp chuột phải và chọn "không hiển thị thông báo từ trang web x". Có lẽ đây là cách khắc phục dễ dàng nhất :)