我正在创建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);
});
答案 0 :(得分:0)
chrome.extension.onRequest事件支持回复发送者的概念,但如果接收者没有回复(或表明它打算),则会有一些代码尝试垃圾回收JS事件处理程序内的上下文设置。因为您在处理程序的上下文中通过chrome.tabs.getSelected启动另一个异步操作,所以垃圾收集可能会在您的getSelected回调触发之前启动。
请参阅有关runtime.onMessage的回调参数的文档:
"有响应时调用(最多一次)的函数。该 参数应该是任何可以使用JSON的对象。如果你有多个 onMessage监听器在同一个文件中,那么只有一个可以发送一个 响应。事件侦听器时此函数变为无效 返回,除非您从事件侦听器返回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
}
);