我正在撰写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");
}
});
在后台,控制台消息按预期显示,因此看起来请求已发送。那么这段代码怎么了?
答案 0 :(得分:1)
而不是:
chrome.extension.sendRequest({cmd: "sendNextProfile"});
它应该是:
chrome.tabs.sendRequest(tabId, {cmd: "sendNextProfile"});
但是如果删除了标签,那么向该标签发送请求是没有意义的,因为它已经不存在了。也许您需要将其发送到其他选项卡?