Chrome扩展程序:从弹出窗口获取当前标签

时间:2012-11-13 10:50:58

标签: javascript google-chrome message

我正在撰写Chrome扩展程序,在其中的一部分中,当点击弹出页面上的按钮时,我需要获取当前标签的标题和网址。

之前我曾经使用过Chrome的消息传递系统,并且经过多方努力,在许多场合设法让它运行起来。但是,我从来没有必要在弹出页面中使用它们,而且从我读过的内容来看,这样做要困难得多。

到目前为止我设法弄清楚的时间表是:

  1. popup.html / popup.js:点击了按钮
  2. popup.html / popup.js:请求/消息被发送到内容脚本
  3. contentScript.js:从弹出页面
  4. 收到请求/消息
  5. contentScript.js:当前标签的标题和网址存储在变量
  6. contentScript.js:2个变量作为字符串化响应发送
  7. popup.html / popup.js:从响应中解析出2个变量
  8. 通常我能够弄清楚这一点,但是,我已经阅读了一些在工作中抛出扳手的事情,例如:

    • chrome.tabs.getSelected只能在后台页面/脚本中使用。这是否意味着根本不需要使用内容脚本?
    • 邮件无法直接从内容脚本发送到弹出页面,必须通过后台页面发送
    • 必须先将弹出窗口确认为已存在,然后才能将消息传递给它(不过,我想我知道该怎么做)

    我已经发现Chrome的消息传递系统很难,但这让我很困惑。因此,这篇文章。

2 个答案:

答案 0 :(得分:65)

chrome.tabs.getSelected已弃用。您应该使用chrome.tabs.query代替。

chrome.tabs.query需要两个参数:一个查询对象和一个回调函数,它将结果选项卡数组作为参数。

您可以通过查询当前处于活动状态且位于当前窗口中的所有选项卡来获取“当前选项卡”。

var query = { active: true, currentWindow: true };

由于查询将返回仅包含当前选项卡的Tab数组,因此请务必获取回调中的第一个元素

function callback(tabs) {
  var currentTab = tabs[0]; // there will be only one in this array
  console.log(currentTab); // also has properties like currentTab.id
}

Etvoilà:

chrome.tabs.query(query, callback);

答案 1 :(得分:-4)

没关系。

事实证明,您可以直接从弹出窗口中使用chrome.tabs.getSelected。有人骗了。 ¬¬