Google chrome extension Chrome扩展-tabId和tabIndex未定义

Google chrome extension Chrome扩展-tabId和tabIndex未定义,google-chrome-extension,Google Chrome Extension,我正在创建一个Chrome扩展。当我尝试获取tabId和tabIndex时,它们都显示为“未定义” 下面是background.js: chrome.extension.onRequest.addListener( function (request, sender) { if (request.command == "selected-tab") { chrome.tabs.getSelected(null,

我正在创建一个Chrome扩展。当我尝试获取tabId和tabIndex时,它们都显示为“未定义”

下面是background.js:

chrome.extension.onRequest.addListener(
    function (request, sender)
    {
        if (request.command == "selected-tab")
        {
            chrome.tabs.getSelected(null,
            function()
            {
                // both show as undefined
                alert('sender.tabId: ' + sender.tabId);
                alert('sender.tabIndex' + sender.tabIndex);
            });
        } 
    }
);
以下是content-script.js:

chrome.extension.sendRequest({ command: "selected-tab", urltext: urlText });
以下是manifest.json:

{
  "manifest_version": 2,

  "name": "test2",
  "description": "Test2 desc",
  "version": "1.0",

  "permissions": [
    "tabs", "http://*/*", "https://*/*","contextMenus"
  ],

  "background": {
    "scripts":  ["jquery-1.11.0.min.js", "background.js"]
  },

  "content_scripts": [
    {
      "matches": ["http://*/*"],
      "js": ["jquery-1.11.0.min.js", "content-script.js"]
    }
  ]

}
如何在background.js中获取当前选项卡的tabId和tabIndex

谢谢

更新#1

在background.js中尝试了此操作,但仍然没有在警报上显示选项卡id:

chrome.tabs.getCurrent(function (tab) {
alert(tab.id);
});

chrome.extension.onRequest事件支持回复发送方的概念,但如果接收方没有回复(或表明它打算回复),则会有一些代码试图在事件处理程序中对JS上下文设置进行垃圾收集。因为您正在处理程序的上下文中通过chrome.tabs.getSelected启动另一个异步操作,所以可能是垃圾收集在您的getSelected回调之前启动

请参阅回调参数上的文档,以:

“函数在有响应时调用(最多一次)。” 参数应该是任何JSON ifiable对象 在同一文档中的Message listener上,则只有一个可以发送 响应。当事件侦听器 返回,除非从事件侦听器返回true以指示 您希望异步发送响应(这将保留消息) 通道打开到另一端,直到调用sendResponse为止。“

一个简单的修复方法是在getSelected回调中手动调用sendResponse:

chrome.extension.onRequest.addListener(
    function (request, sender)
    {
        if (request.command == "selected-tab")
        {
            chrome.tabs.getSelected(null,
            function()
            {
                // both show as undefined
                alert('sender.tabId: ' + sender.tabId);
                alert('sender.tabIndex' + sender.tabIndex);
                sendResponse(); // context can now be GC'd
            });
        }
        return true; // indicates we plan to call sendResponse
    }
);

有人知道为什么tabId和tabIndex是未定义的吗?或者至少给我指出正确的方向?谢谢