Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展:如何将消息从后台发送到后台?_Javascript_Google Chrome_Google Chrome Extension_Google Chrome App - Fatal编程技术网

Javascript Chrome扩展:如何将消息从后台发送到后台?

Javascript Chrome扩展:如何将消息从后台发送到后台?,javascript,google-chrome,google-chrome-extension,google-chrome-app,Javascript,Google Chrome,Google Chrome Extension,Google Chrome App,我的背景听众是 chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) 在chrome.contextMenus.onclicklistener中,我想使用消息系统,我调用 chrome.runtime.sendMessage 在监听器中,但它不起作用 那么,如何在后台之间发送消息呢?我认为您应该使用chrome.extension.onRequestExternal或chrome.exten

我的背景听众是

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse)
chrome.contextMenus.onclick
listener中,我想使用消息系统,我调用

chrome.runtime.sendMessage
在监听器中,但它不起作用


那么,如何在后台之间发送消息呢?

我认为您应该使用
chrome.extension.onRequestExternal
chrome.extension.onConnectExternal
页面发送的消息不会被同一页面接收

如果您希望能够重用
onMessage
侦听器,请将其放在单独的函数中。例如:

function alwaysDoSomething() {
    console.log('Done something!');
}
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    alwaysDoSomething();
});
chrome.contextMenus.onClicked.addListener(function(info, tab) {
    alwaysDoSomething();
});
有一个未记录的方法可用于手动触发事件它没有文档记录,因此使用它的风险自负

chrome.contextMenus.onClicked.addListener(function(info, tab) {
    var message = 'whatever';
    var sender = {tab: null, id: chrome.runtime.id};
    var sendResponse = function() {};
    chrome.runtime.onMessage.dispatch(message, sender, sendResponse);
});

我必须确保听者可以收听contentScript和popup的消息,现在contentScript和popup可以正常工作,但在后台它不起作用。谢谢,也许这是我实现目标的唯一方法。实际上,对于每一条消息,我都有一个做这件事的功能,该函数需要与侦听器相同的参数。如果我直接调用该函数,它会使我的结构变得复杂。@wener最干净的方法是在我的答案上方发布的,最后会发布一个不需要对代码进行任何更改的方法。谢谢,这看起来很奇怪,但我别无选择。也许这是扩展系统中遗漏的东西。