39

我正在编写一个 Chrome 扩展程序,其中一部分是,当单击弹出页面上的按钮时,我需要获取当前选项卡的标题和 URL。

我以前曾使用过 Chrome 的消息传递系统,经过多次努力,我成功地让它工作了很多次。但是,我从来没有将它们与弹出页面一起使用,而且从我所读到的内容来看,这样做要困难得多。

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

  1. popup.html/ popup.js: 按钮被点击
  2. popup.html/ popup.js: 请求/消息被发送到内容脚本
  3. contentScript.js:从弹出页面收到请求/消息
  4. contentScript.js: 当前选项卡的标题和 URL 存储在一个变量中
  5. contentScript.js: 2 个变量作为字符串化响应发送
  6. popup.html/ popup.js:从响应中解析出 2 个变量

通常我能够弄清楚这一点,但是,我已经阅读了一些在工作中引发了扳手的事情,例如:

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

我已经发现 Chrome 的消息传递系统已经够难了,但这完全让我感到困惑。因此,这篇文章。

4

1 回答 1

95

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
}

等等:

chrome.tabs.query(query, callback);
于 2014-06-06T00:19:39.793 回答