Làm cách nào để khắc phục 'Unchecked runtime.lastError: Cổng thông báo đã đóng trước khi nhận được phản hồi' vấn đề chrome?


137

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.


3
Bạn có bất kỳ trình chặn quảng cáo?
Maelig

1
Kiểm tra câu trả lời của tôi cho yêu cầu khác này: stackoverflow.com/questions/53919591/
Kẻ

3
Cảm ơn các bạn, vấn đề là phần mở rộng "Video Downloader chuyên nghiệp".
Triumf Maqedonci

2
Tương tự đối với tôi, Video Downloader chuyên nghiệp đã tạo ra các lỗi như vậy
sinedsem

1
Bỏ phiếu để đóng, vì giải pháp được chấp nhận là một vấn đề cấu hình và không liên quan đến việc sửa / hiểu nguyên nhân của vấn đề lập trình.
Greg Domjan

Câu trả lời:


162

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.


20
MeddleMonkey bị vô hiệu hóa
terantul

6
Tôi gặp vấn đề này, là do Tiện ích mở rộng tìm kiếm an toàn Norton
Boardy

7
Trong trường hợp của tôi, tiện ích mở rộng là Thanh công cụ dành cho nhà xuất bản của Google
Leandro Castro

1
Tôi đã có phần mở rộng "Bộ điều khiển tốc độ video" trong trạng thái bị hỏng. Đã sửa nó rồi thì lỗi.
Alielson Piffer

3
Đối với tôi đó là "Norton Safe Web".
frankfurt-laravel 30/10/19

49

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 sendMessagesẽ 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]


4
Là một người đứng đầu không sử dụng async/awaitcho 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ỏ asyncvà chuyển đổi awaitcấu trúc của mình trong một thenmã cấu trúc và bây giờ nó hoạt động.
vdegenne

nhưng ... tôi không cố gửi phản hồi, tôi cũng không mong đợi!
Michael

Thật là một sửa chữa tuyệt vời, cảm ơn! Tất cả những gì tôi phải làm là thêm 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 $.ajaxbên trong chức năng này, đó là lý do tại sao tôi cần sửa lỗi này.
RcoderNY

42

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ó.


2
Trong trường hợp của tôi, đó là phần mở rộng 1 mật khẩu
Alexander Kim

trong trường hợp của tôi, đó là Máy phân tích độ tương phản màu
Michael Liquori

2
Trong trường hợp của tôi, đó là Google Publisher Toolbardưới thời Vivaldivivaldi://extensions
Shim-Sao

Có, vô hiệu hóa từng phần mở rộng. Tôi đã tìm ra rằng có một số phần mở rộng gây ra lỗi! Cảm ơn
Jose Mhlanga

17

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"
  ]
}

Nó làm việc cho tôi! Kịch bản nào mặc định return falsesẽ hữu ích?
Eduardo Reis

Tài liệu nói : 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?
Eduardo Reis

@EduardoReis, với FALSE, nó có thể được sử dụng làm người cung cấp thông tin để thông báo về một số sự kiện.
Aleksej Vasinov

14

Tôi đã trả lời về điều này .

Trong trường hợp của tôi, vấn đề là do Video Downloader professionalAdBlock

Nói tóm lại, sự cố này xảy ra do một số plugin Google Chrome


7

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"


4

Đố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:

  1. https://www.chromestatus.com/feature/5629709824032768
  2. https://www.chromium.org/Home/chromium-security/extension-content-script-fetches

Đ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.


4

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! ✌️


2

Trong trường hợp của tôi, đó là phần mở rộng chrome OneTab.


2

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);
  }
});

1

Vô hiệu hóa nếu có bất kỳ tiện ích chống vi-rút nào được cài đặt trên trình duyệt. Trong trường hợp của tôi, phần mở rộng chống vi-rút là thủ phạm.



0

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.


0

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 :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.