admin管理员组

文章数量:1346047

I trying to run example code given on the tabs.sendMessage() MDN page. So my code is:

manifest.json:

{
    "manifest_version": 2,
    "name": "test1",
    "version": "1.0",
    "description": "test",
    "icons": {
        "48": "icons/Ruler48.png"
    },
    "permissions": [
        "notifications",
        "tabs",
        "activeTab"
    ],
    "browser_action": {
        "default_icon": "icons/Ruler48.png",
        "default_title": "test"
    },
    "content_scripts": [{
        "matches": ["*://*/"],
        "js": ["content-script.js"]
    }],
    "background": {
        "scripts": ["bgS.js"]
    }
}

bgS.js:

function onError(error) {
  console.error(`Error: ${error}`);
}

function sendMessageToTabs(tabs) {
  for (let tab of tabs) {
    console.log(tab.id);
    browser.tabs.sendMessage(
      tab.id,
      {greeting: "Hi from background script"}
    ).then(response => {
      console.log("Message from the content script:");
      console.log(response.response);
    }).catch(onError);
  }
}

browser.browserAction.onClicked.addListener(() => {
  browser.tabs.query({
    currentWindow: true,
    active: true
  }).then(sendMessageToTabs).catch(onError);
});

content-script.js:

browser.runtime.onMessage.addListener(request => {
  console.log("Message from the background script:");
  console.log(request.greeting);
  return Promise.resolve({response: "Hi from content script"});
});

I run it with web-ext run, after clicking on browser action button, in the console I get this message: Error: Error: Could not establish connection. Receiving end does not exist.

The output from web-ext run --verbose

 web-ext run --verbose
[program.js][debug] Getting the version from package.json
[program.js][info] Version: 1.8.0
[program.js][debug] Getting the version from package.json
[cmd/run.js][info] Running web extension from C:\test
[util/manifest.js][debug] Validating manifest at C:\test\manifest.json
[cmd/run.js][debug] Creating new Firefox profile
[cmd/run.js][debug] Deferring extension installation until after connecting to the remote debugger    
[firefox/index.js][debug] Checking if remote Firefox port 6005 is available
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[firefox/index.js][debug] Executing Firefox binary: C:\Program Files\Mozilla Firefox\firefox.exe    
[firefox/index.js][info] Use --verbose or open Tools > Web Developer > Browser Console to see logging
[cmd/run.js][debug] Connecting to the remote Firefox debugger
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[cmd/run.js][debug] Retrying Firefox (0); connection error: Error: connect ECONNREFUSED 127.0.0.1:6005
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[cmd/run.js][debug] Retrying Firefox (1); connection error: Error: connect ECONNREFUSED 127.0.0.1:6005
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[cmd/run.js][debug] Retrying Firefox (2); connection error: Error: connect ECONNREFUSED 127.0.0.1:6005
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[firefox/index.js][debug] Firefox stdout: Started debugger server on 6005
[cmd/run.js][debug] Retrying Firefox (3); connection error: Error: connect ECONNREFUSED 127.0.0.1:6005
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[firefox/remote.js][debug] Connected to the remote Firefox debugger
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/monjs/toolkit/loader.js -> resource://devtools/shared/security/socket.js, line 778: ReferenceError: reference to undefined property this._handshakeTimeout
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: chrome://browser/content/browser.js, line 6573: SyntaxError: applying the 'delete' operator to an unqualified name is deprecated
[firefox/remote.js][debug] installTemporaryAddon: {"addon":{"id":"d71da5f6ee8174302deb5edfa887679913cd71ed@temporary-addon","actor":false},"from":"server1.conn0.addonsActor3"}
[firefox/remote.js][info] Installed C:\test as a temporary add-on
[cmd/run.js][info] The extension will reload if any source file changes
[util/file-filter.js][debug] Resolved path **/*.xpi with sourceDir C:\test to C:\test\**\*.xpi
[util/file-filter.js][debug] Resolved path **/*.zip with sourceDir C:\test to C:\test\**\*.zip
[util/file-filter.js][debug] Resolved path **/.* with sourceDir C:\test to C:\test\**\.*
[util/file-filter.js][debug] Resolved path **/.*/**/* with sourceDir C:\test to C:\test\**\.*\**\*
[util/file-filter.js][debug] Resolved path **/node_modules with sourceDir C:\test to C:\test\**\node_modules
[util/file-filter.js][debug] Resolved path **/node_modules/**/* with sourceDir C:\test to C:\test\**\node_modules\**\*
[util/file-filter.js][debug] Resolved path C:\test\web-ext-artifacts with sourceDir C:\test to C:\test\web-ext-artifacts
[util/file-filter.js][debug] Resolved path C:\test\web-ext-artifacts\**\* with sourceDir C:\test to C:\test\web-ext-artifacts\**\*
[watcher.js][debug] Watching for file changes in C:\test
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: chrome://browser/content/tabbrowser.xml, line 640: ReferenceError: reference to undefined property this.mBrowser.initialPageLoadedFromURLBar
[firefox/index.js][debug] Firefox stdout: 1486682957594 addons.webextension.d71da5f6ee8174302deb5edfa887679913cd71ed@temporary-addon    WARN    Please specify whether you want browser_style or not in your browser_action options.
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: chrome://global/content/bindings/browser.xml, line 385: ReferenceError: reference to undefined property tabBrowser.localName
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/monjs/toolkit/loader.js -> resource://devtools/shared/node-properties/node-properties.js, line 134: ReferenceError: reference to undefined property control.resume
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/monjs/toolkit/loader.js -> resource://devtools/shared/node-properties/node-properties.js, line 124: ReferenceError: reference to undefined property options._ments[c]
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/monjs/toolkit/loader.js -> resource://devtools/shared/node-properties/node-properties.js, line 130: ReferenceError: reference to undefined property options._separators[c]
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/monjs/toolkit/loader.js -> resource://gre/modules/monjs/sdk/system/unload.js, line 31: ReferenceError: reference to undefined property observers[i].value
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/ProfileAge.jsm, line 202: ReferenceError: reference to undefined property times.reset
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/LoginStore.jsm, line 275: ReferenceError: reference to undefined property this.data.version
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: chrome://global/content/bindings/browser.xml, line 385: ReferenceError: reference to undefined property tabBrowser.localName

This, what in browser console, the first message appear before I install it. I mean it was there before installation, so it installs silently. After clicking on button I got last two messages, the first one gives tab.id from this line console.log(tab.id) and then error:

1486683758937   addons.webextension.16f1634b55daa52a653f3a2ba33358a691bb015a@temporary-addon    WARN    Please specify whether you want browser_style or not in your browser_action options.
10  bgS.js:8:3
Error: Error: Could not establish connection. Receiving end does not exist.  bgS.js:3:3

I trying to run example code given on the tabs.sendMessage() MDN page. So my code is:

manifest.json:

{
    "manifest_version": 2,
    "name": "test1",
    "version": "1.0",
    "description": "test",
    "icons": {
        "48": "icons/Ruler48.png"
    },
    "permissions": [
        "notifications",
        "tabs",
        "activeTab"
    ],
    "browser_action": {
        "default_icon": "icons/Ruler48.png",
        "default_title": "test"
    },
    "content_scripts": [{
        "matches": ["*://*/"],
        "js": ["content-script.js"]
    }],
    "background": {
        "scripts": ["bgS.js"]
    }
}

bgS.js:

function onError(error) {
  console.error(`Error: ${error}`);
}

function sendMessageToTabs(tabs) {
  for (let tab of tabs) {
    console.log(tab.id);
    browser.tabs.sendMessage(
      tab.id,
      {greeting: "Hi from background script"}
    ).then(response => {
      console.log("Message from the content script:");
      console.log(response.response);
    }).catch(onError);
  }
}

browser.browserAction.onClicked.addListener(() => {
  browser.tabs.query({
    currentWindow: true,
    active: true
  }).then(sendMessageToTabs).catch(onError);
});

content-script.js:

browser.runtime.onMessage.addListener(request => {
  console.log("Message from the background script:");
  console.log(request.greeting);
  return Promise.resolve({response: "Hi from content script"});
});

I run it with web-ext run, after clicking on browser action button, in the console I get this message: Error: Error: Could not establish connection. Receiving end does not exist.

The output from web-ext run --verbose

 web-ext run --verbose
[program.js][debug] Getting the version from package.json
[program.js][info] Version: 1.8.0
[program.js][debug] Getting the version from package.json
[cmd/run.js][info] Running web extension from C:\test
[util/manifest.js][debug] Validating manifest at C:\test\manifest.json
[cmd/run.js][debug] Creating new Firefox profile
[cmd/run.js][debug] Deferring extension installation until after connecting to the remote debugger    
[firefox/index.js][debug] Checking if remote Firefox port 6005 is available
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[firefox/index.js][debug] Executing Firefox binary: C:\Program Files\Mozilla Firefox\firefox.exe    
[firefox/index.js][info] Use --verbose or open Tools > Web Developer > Browser Console to see logging
[cmd/run.js][debug] Connecting to the remote Firefox debugger
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[cmd/run.js][debug] Retrying Firefox (0); connection error: Error: connect ECONNREFUSED 127.0.0.1:6005
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[cmd/run.js][debug] Retrying Firefox (1); connection error: Error: connect ECONNREFUSED 127.0.0.1:6005
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[cmd/run.js][debug] Retrying Firefox (2); connection error: Error: connect ECONNREFUSED 127.0.0.1:6005
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[firefox/index.js][debug] Firefox stdout: Started debugger server on 6005
[cmd/run.js][debug] Retrying Firefox (3); connection error: Error: connect ECONNREFUSED 127.0.0.1:6005
[firefox/remote.js][debug] Connecting to Firefox on port 6005
[firefox/remote.js][debug] Connected to the remote Firefox debugger
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/monjs/toolkit/loader.js -> resource://devtools/shared/security/socket.js, line 778: ReferenceError: reference to undefined property this._handshakeTimeout
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: chrome://browser/content/browser.js, line 6573: SyntaxError: applying the 'delete' operator to an unqualified name is deprecated
[firefox/remote.js][debug] installTemporaryAddon: {"addon":{"id":"d71da5f6ee8174302deb5edfa887679913cd71ed@temporary-addon","actor":false},"from":"server1.conn0.addonsActor3"}
[firefox/remote.js][info] Installed C:\test as a temporary add-on
[cmd/run.js][info] The extension will reload if any source file changes
[util/file-filter.js][debug] Resolved path **/*.xpi with sourceDir C:\test to C:\test\**\*.xpi
[util/file-filter.js][debug] Resolved path **/*.zip with sourceDir C:\test to C:\test\**\*.zip
[util/file-filter.js][debug] Resolved path **/.* with sourceDir C:\test to C:\test\**\.*
[util/file-filter.js][debug] Resolved path **/.*/**/* with sourceDir C:\test to C:\test\**\.*\**\*
[util/file-filter.js][debug] Resolved path **/node_modules with sourceDir C:\test to C:\test\**\node_modules
[util/file-filter.js][debug] Resolved path **/node_modules/**/* with sourceDir C:\test to C:\test\**\node_modules\**\*
[util/file-filter.js][debug] Resolved path C:\test\web-ext-artifacts with sourceDir C:\test to C:\test\web-ext-artifacts
[util/file-filter.js][debug] Resolved path C:\test\web-ext-artifacts\**\* with sourceDir C:\test to C:\test\web-ext-artifacts\**\*
[watcher.js][debug] Watching for file changes in C:\test
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: chrome://browser/content/tabbrowser.xml, line 640: ReferenceError: reference to undefined property this.mBrowser.initialPageLoadedFromURLBar
[firefox/index.js][debug] Firefox stdout: 1486682957594 addons.webextension.d71da5f6ee8174302deb5edfa887679913cd71ed@temporary-addon    WARN    Please specify whether you want browser_style or not in your browser_action options.
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: chrome://global/content/bindings/browser.xml, line 385: ReferenceError: reference to undefined property tabBrowser.localName
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/monjs/toolkit/loader.js -> resource://devtools/shared/node-properties/node-properties.js, line 134: ReferenceError: reference to undefined property control.resume
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/monjs/toolkit/loader.js -> resource://devtools/shared/node-properties/node-properties.js, line 124: ReferenceError: reference to undefined property options._ments[c]
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/monjs/toolkit/loader.js -> resource://devtools/shared/node-properties/node-properties.js, line 130: ReferenceError: reference to undefined property options._separators[c]
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/monjs/toolkit/loader.js -> resource://gre/modules/monjs/sdk/system/unload.js, line 31: ReferenceError: reference to undefined property observers[i].value
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/ProfileAge.jsm, line 202: ReferenceError: reference to undefined property times.reset
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/LoginStore.jsm, line 275: ReferenceError: reference to undefined property this.data.version
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: chrome://global/content/bindings/browser.xml, line 385: ReferenceError: reference to undefined property tabBrowser.localName

This, what in browser console, the first message appear before I install it. I mean it was there before installation, so it installs silently. After clicking on button I got last two messages, the first one gives tab.id from this line console.log(tab.id) and then error:

1486683758937   addons.webextension.16f1634b55daa52a653f3a2ba33358a691bb015a@temporary-addon    WARN    Please specify whether you want browser_style or not in your browser_action options.
10  bgS.js:8:3
Error: Error: Could not establish connection. Receiving end does not exist.  bgS.js:3:3
Share Improve this question edited Feb 10, 2017 at 3:24 Makyen 33.4k12 gold badges92 silver badges125 bronze badges asked Feb 9, 2017 at 22:20 someNameJustToAnswersomeNameJustToAnswer 1551 silver badge10 bronze badges 11
  • What, exactly, was shown in the Browser Console (Ctrl-Shift-J, or Cmd-Shift-J on OSX) when you tried to install and use the extension? – Makyen Commented Feb 9, 2017 at 23:18
  • When you click on your browser action button, does the active tab contain a page with a URL that begins with http:// or https://? Are you doing then when viewing a tab with a URL like about:addons, about:debugging, etc.? Are you trying to use this on a page on AMO? – Makyen Commented Feb 9, 2017 at 23:22
  • Don't know if that what you ask for but when i run it with web-ext run --verbose i get this. I updated question. – someNameJustToAnswer Commented Feb 9, 2017 at 23:31
  • I tried it with google. still same effect Error: Error: Could not establish connection. Receiving end does not exist. bgS.js:3:3 – someNameJustToAnswer Commented Feb 9, 2017 at 23:37
  • Updated with Browser console output. – someNameJustToAnswer Commented Feb 9, 2017 at 23:50
 |  Show 6 more ments

1 Answer 1

Reset to default 9

The error you are seeing results when there is no runtime.onMessage listener defined by a content script for your extension in the tab which was specified in the call to tabs.sendMessage(). This can be because there is no content script or because the content script(s) which have been injected have not added a listener for runtime.onMessage.

You should keep in mind that you can not inject content scripts into pages that have URLs like about:newtab, about:debugging, etc. In addition, Firefox does not permit you to inject scripts into pages on addons.mozilla.

Your issue was pounded because your Match Pattern is probably not what you intended it to be. You probably intended your matches to be:

"matches": ["*://*/*"],

Note the trailing * at the end of the match pattern. The pattern you are currently using "*://*/" will only match the top page on any domain which is loaded using either the http or the https scheme. For instance, it will not match https://www.google./?gws_rd=ssl, but will match http://www.example./.

Given that your code is executing directly upon a user's click of a browser or page action button, you need to handle this error in some reasonable manner that provides feedback to the user that what they have requested can not be done, because the user will click the button on pages like about:newtab, which will result in this error. How you handle this error, will depend on what your code is doing. Rather than setting up a situation where the user is clicking on an enabled button which they expect to work, the better alternative is to disable your action button (for browser actions, using browserAction.disable()) on pages for which you can not execute your code.

本文标签: javascriptbrowsertabssendMessage() Error Receiving end does not existStack Overflow