browser.tabs.sendMessage():错误:接收端不存在 [英] browser.tabs.sendMessage(): Error: Receiving end does not exist

查看:147
本文介绍了browser.tabs.sendMessage():错误:接收端不存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图运行 tabs.sendMessage() MDN页面.所以我的代码是:

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

我在单击浏览器操作按钮后,使用web-ext运行它,在控制台中,我收到以下消息:错误:错误:无法建立连接.接收端不存在.

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.

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/commonjs/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/commonjs/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/commonjs/toolkit/loader.js -> resource://devtools/shared/node-properties/node-properties.js, line 124: ReferenceError: reference to undefined property options._comments[c]
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: resource://gre/modules/commonjs/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/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/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

这是我在安装浏览器之前在浏览器控制台中看到的第一条消息.我的意思是安装之前就已经在那里,所以它会以静默方式安装.单击按钮后,我得到了最后两条消息,第一个消息从此行 console.log(tab.id)给出 tab.id ,然后出现错误:

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

推荐答案

没有 tabs.sendMessage() .这可能是因为没有内容脚本,或者是因为已注入的内容脚本未添加 runtime.onMessage 的侦听器.

请记住,您不能将内容脚本插入具有 about:newtab about:debugging 等URL的页面中.此外,Firefox确实可以不允许您将脚本注入 addons.mozilla.org 上的页面.

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

您的问题更加复杂,因为您的匹配模式可能是不是您的预期.您可能希望您的匹配项为:

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

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

请注意匹配模式末尾的 * .您当前使用的"*://*/" 模式仅与使用 http https加载的任何域上的首页匹配方案.例如,它将与 https://www.google.com/?gws_rd=ssl 不匹配,但将与 http://www.example.com/匹配.

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.com/?gws_rd=ssl, but will match http://www.example.com/.

鉴于您的代码是在用户单击浏览器或页面操作按钮后直接执行的,因此您需要以某种合理的方式处理此错误,从而向用户提供反馈,表明他们无法完成他们所请求的操作,因为用户单击类似 about:newtab 的页面上的按钮,会导致此错误.您如何处理此错误,将取决于您的代码在做什么.与其设置用户单击他们希望工作的启用按钮的情况,不如将其禁用,更好的选择是禁用操作按钮(对于浏览器操作,请使用

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.

这篇关于browser.tabs.sendMessage():错误:接收端不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆