谷歌浏览器扩展消息传递背景到上下文

时间:2011-06-19 09:14:48

标签: google-chrome-extension messaging

我正在撰写Google Chrome的扩展程序。内容脚本永远不会看到已从后台页面发送sendNextProfile请求。至少,RECEIVED REQUEST FOR NEXT PROFILE消息永远不会出现在控制台日志中,后台也不会看到新的请求。

这是内容脚本中的代码

//send request for first profile
var currentProfile=0;
chrome.extension.sendRequest({cmd: "openProfile", url: profileLinks[currentProfile]});

//listen for request to send next profile
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.cmd == "sendNextProfile") {
        console.log("RECEIVED REQUEST FOR NEXT PROFILE");
        ++currentProfile;
        chrome.extension.sendRequest({cmd: "openProfile", url: profileLinks[currentProfile]});
    }
});

这是背景页中的代码

//detect when message tab is closed and request new profile
//var closedTabId=null;
chrome.tabs.onRemoved.addListener(function(tabid, removeInfo) { 
    console.log("TAB CLOSED "+tabid);
    if (tabid==msgTabId) {
        chrome.extension.sendRequest({cmd: "sendNextProfile"});
        console.log("REQUESTED NEW PROFILE");
    }   
});

在后台,控制台消息按预期显示,因此看起来请求已发送。那么这段代码怎么了?

1 个答案:

答案 0 :(得分:1)

而不是:

chrome.extension.sendRequest({cmd: "sendNextProfile"});

它应该是:

chrome.tabs.sendRequest(tabId, {cmd: "sendNextProfile"});

但是如果删除了标签,那么向该标签发送请求是没有意义的,因为它已经不存在了。也许您需要将其发送到其他选项卡?