Javascript 获取内容脚本中当前选项卡id的方法-chrome扩展

Javascript 获取内容脚本中当前选项卡id的方法-chrome扩展,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在尝试获取内容脚本中的当前选项卡id。但它总是失败。我不确定,我在做什么 以下是来自其他主题的一些解决方案,但这些解决方案在我的扩展中不起作用: 代码1-content.js chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { alert("sent from tab.id=", sender.tab.id); }); chrome.extension.sendRequest

我正在尝试获取内容脚本中的当前选项卡id。但它总是失败。我不确定,我在做什么

以下是来自其他主题的一些解决方案,但这些解决方案在我的扩展中不起作用:

代码1-content.js

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
    alert("sent from tab.id=", sender.tab.id);
});
chrome.extension.sendRequest({
    action: "WhatYouWant"
});

chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
    if (request.action) {
        alert('The response is : ' + request.action);
    }
});
chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
    if (request.action) {
        // Make what you want
        chrome.tabs.getSelected(null, function (tabs) {
            chrome.tabs.sendRequest(tabs.id, {
                action: "response"
            });
        });
    }
});
代码2-content.js

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
    alert("sent from tab.id=", sender.tab.id);
});
chrome.extension.sendRequest({
    action: "WhatYouWant"
});

chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
    if (request.action) {
        alert('The response is : ' + request.action);
    }
});
chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
    if (request.action) {
        // Make what you want
        chrome.tabs.getSelected(null, function (tabs) {
            chrome.tabs.sendRequest(tabs.id, {
                action: "response"
            });
        });
    }
});
background.js

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
    alert("sent from tab.id=", sender.tab.id);
});
chrome.extension.sendRequest({
    action: "WhatYouWant"
});

chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
    if (request.action) {
        alert('The response is : ' + request.action);
    }
});
chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
    if (request.action) {
        // Make what you want
        chrome.tabs.getSelected(null, function (tabs) {
            chrome.tabs.sendRequest(tabs.id, {
                action: "response"
            });
        });
    }
});
manifest.json

...
"background": {
    "scripts": ["background.js"],
    "persistent": true
},

"content_scripts": [{
    "all_frames": true,
    "js": ["content.js"],
    "matches": ["<all_urls>"],
    "run_at": "document_end"
}],
"web_accessible_resources": [
    "content.js"
],
...
。。。
“背景”:{
“脚本”:[“background.js”],
“持久”:正确
},
“内容脚本”:[{
“所有框架”:正确,
“js”:[“content.js”],
“匹配项”:[“”],
“运行时间”:“文档结束”
}],
“网络可访问资源”:[
“content.js”
],
...
注意:这不是重复的主题,其他问题中的解决方案不适用于我。

chrome.tabs.query()
函数返回tabs数组

请参阅本文件:

当我尝试
tabs.query()
函数时,回调函数返回所有当前的tabs数组

chrome.tabs.query( {}, function(cbResult){
  console.log(cbResult);});
使用google的文档和上面的回调返回,您可以找到使用first query()参数的正确选项卡

如果第一个参数为Null,则查询函数返回数组中的所有制表符。 可以使用第一个参数缩小候选选项卡的范围


分机消息不会将消息传递到发送消息的页面。获取选项卡id的常用方法是向您的后台/事件页面发送消息,然后该页面用sender.tab.id进行响应。您还可以添加一个iframe,指向通过web可访问资源公开的扩展页面-iframe可以使用chrome.tabs.getCurrent获得自己的选项卡,然后,它可以通过DOM消息事件(即window.parent.postMessage)发送到您的内容脚本。下面是根据我链接的示例构建的完整工作扩展:我想您的尝试方式有问题。安装扩展,打开或重新加载网页(如www.google.com),检查控制台。您还可以通过设置断点和检查变量,使用devtool调试代码。这是我在没有TeamViewer会话或类似远程访问的情况下所能提供的最大帮助,但StackOverflow不是这样工作的。内容脚本中无法访问
chrome.tabs
api: