ChatGPT解决这个技术问题 Extra ChatGPT

How to fix 'Unchecked runtime.lastError: The message port closed before a response was received' chrome issue?

Want to improve this post? Provide detailed answers to this question, including citations and an explanation of why your answer is correct. Answers without enough detail may be edited or deleted.

I'm using VueJS and Laravel for my project. This issue started to show lately and it shows even in the old git branches.

This error only shows in the Chrome browser.

Do you have any ad blocker ?
Check my answer to this other request: stackoverflow.com/questions/53919591/…
Thanks guys, the problem was the extension "Video Downloader professional".
Moderator Note: We don't need new answers listing every extension you've found to cause this problem. A single answer saying that the problem can be caused by extensions and recommending to disable them is sufficient. Answers that do nothing more than name an extension have been and will continue to be deleted.
stackoverflow.com/questions/59914490/… perhaps the answer here is more beneficial than simply 'disable x extension'

M
MirekH

I disabled all installed extensions in Chrome - works for me. I have now clear console without errors.


MeddleMonkey disabled
I had this problem, was caused by the Norton Safe Search Extension
In my case the extension was Google Publisher Toolbar
For me it was "Norton Safe Web".
How is disabling all extensions a solution... or even a consideration. For many of us the extensions provide essential functionality.
O
Ofek Shilon

In case you're an extension developer who googled your way here trying to stop causing this error:

The issue isn't CORB (as another answer here states) as blocked CORs manifest as warnings like -

Cross-Origin Read Blocking (CORB) blocked cross-origin response https://www.example.com/example.html with MIME type text/html. See https://www.chromestatus.com/feature/5629709824032768 for more details.

The issue is most likely a mishandled async response to runtime.sendMessage. As MDN says:

To send an asynchronous response, there are two options: return true from the event listener. This keeps the sendResponse function valid after the listener returns, so you can call it later. return a Promise from the event listener, and resolve when you have the response (or reject it in case of an error).

When you send an async response but fail to use either of these mechanisms, the supplied sendResponse argument to sendMessage goes out of scope and the result is exactly as the error message says: your message port (the message-passing apparatus) is closed before the response was received.

Webextension-polyfill authors have already written about it in June 2018.

So bottom line, if you see your extension causing these errors - inspect closely all your onMessage listeners. Some of them probably need to start returning promises (marking them as async should be enough). [Thanks @vdegenne]


As an heads up don't use async/await for your background listener callback. This is what failed for me, I removed async and transformed my await structure in a then structure code and now it works.
but... i'm not trying to send any response, nor am I expecting one!
What a great fix, thanks! All I had to do is add return true; at the bottom of my chrome.runtime.onMessage.addListener() function and the problem was solved! I am using jQuery's $.ajax inside this function which is why I need this fix.
@vdegenne you can use async for the listener, but then you can't return true at the end, and can't use the sendResponse callback. You just have to resolve with the actual response.
@Michael In Chrome v99+ extensions, this is a bug: stackoverflow.com/q/71520198/2336725
A
Aguayma

If you go to chrome://extensions/, you can just toggle each extension one at a time and see which one is actually triggering the issue.

Once you toggle the extension off, refresh the page where you are seeing the error and wiggle the mouse around, or click. Mouse actions are the things that are throwing errors.

So I was able to pinpoint which extension was actually causing the issue and disable it.


In my case it was 1password extension
in my case it was Color Contrast Analyzer
In my case it was Google Publisher Toolbar under Vivaldi vivaldi://extensions
Yes, disable extensions one by one. I figured out that there were several extensions causing the error! Thanks
In my case it was Kaspersky browser extension.
A
Aleksej Vasinov

Post is rather old and not closely related to Chrome extensions development, but let it be here.

I had same problem when responding on message in callback. The solution is to return true in background message listener.

Here is simple example of background.js. It responses to any message from 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
});

Here is popup.js, which sends message on popup. You'll get exceptions until you un-comment "return true" line in background.js file.

document.addEventListener("DOMContentLoaded", () => {
    chrome.extension.sendMessage({action: "ping"}, function(resp) {
        console.log(JSON.stringify(resp));
    });
});

manifest.json, just in case :) Pay attention on alarm permissions section!

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

It worked for me! What scenario the default return false would be useful?
Docs says: This function becomes invalid when the event listener returns, unless you return true. What means invalid? doesn't it suppose to be created every time it receives a message anyways?
@EduardoReis, with FALSE it could be used as informer to notify about some event.
Aleksej, Can you help me how to include addListener code in struts 1 web project . i use JS, JSP,HTML , FRAMES, CSS as UI stack. just wondered where exactly need to apply it. tried added below snippet in parent js file but it doesn't recognize. usually i dont have listener code in my app. chrome.runtime.onMessage.addListener(function(rq, sender, sendResponse) { setTimeout(function() { sendResponse({status: true}); }, 1); alert("Inside Background.js file"); return true; // Return true to fix the error });
Sorry, I don't know JSP to help you with. Did you locate listener in your JS code?
A
Ahmad Awais

This error is generally caused by one of your Chrome extensions.

I recommend installing this One-Click Extension Disabler, I use it with the keyboard shortcut COMMAND (⌘) + SHIFT (⇧) + D — to quickly disable/enable all my extensions.

Once the extensions are disabled this error message should go away.

Peace! ✌️


ctrl+shit+d - don't work in linux, and no hotkeys for this extension. chrome.google.com/webstore/detail/disable-extensions-tempor/… And tanks for this extension.
that was the case for me
a
airush

If error reason is extension use incognito Ctrl+Shift+N. In incognito mode Chrome does not have extensions.

UPD. If you need some extension in incognito mode e.g. ReduxDevTools or any other, in extension settings turn on "Allow in incognito"


G
Gopal B Shimpi

Make sure you are using the correct syntax.

We should use the sendMessage() method after listening it.

Here is a simple example of contentScript.js It sendRequest to 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 is deprecated use sendMessage
Hi, Can some one help me how to include addListener code in struts 1 web project . i use JS, JSP,HTML , FRAMES, CSS as UI stack. just wondered where exactly need to apply it. tried added below snippet in parent js file but it doesn't recognize. usually i dont have listener code in my app. chrome.runtime.onMessage.addListener(function(rq, sender, sendResponse) { setTimeout(function() { sendResponse({status: true}); }, 1); alert("Inside Background.js file"); return true; // Return true to fix the error });
J
Jonathan Lin

For those coming here to debug this error in Chrome 73, one possibility is because Chrome 73 onwards disallows cross-origin requests in content scripts.

More reading:

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

This affects many Chrome extension authors, who now need to scramble to fix the extensions because Chrome thinks "Our data shows that most extensions will not be affected by this change."

(it has nothing to do with your app code)

UPDATE: I fixed the CORs issue but I still see this error. I suspect it is Chrome's fault here.


A
AnthonyVO

In my case it was a breakpoint set in my own page source. If I removed or disabled the breakpoint then the error would clear up.

The breakpoint was in a moderately complex chunk of rendering code. Other breakpoints in different parts of the page had no such effect. I was not able to work out a simple test case that always trigger this error.


W
Waheed Rafiq

I suggest you first disable all the extensions then one by one enable them until you find the one that has caused the issue in my case Natural Reader Text to Speech was causing this error so I disabled it. nothing to do with Cross-Origin Read Blocking (CORB) unless the error mention Cross-Origin then further up the tread it is worthwhile trying that approach.


w
wahsandaruwan

The cause of this issue is related to one of your chrome extensions, not CORS or CORB. To fix that you can turn off each and every chrome extension you installed.


T
Thirosh Madhusha

I faced the same error in my react project running.

That error coming from my chrome

IObit Surfing Protection 2.2.7

extensions. That extension off my error was solved.

If you face same like that error, 1st turn off your chrome ad blocker or any other extensions while running.