Chrome扩展:从弹出窗口获取当前选项卡

aiazj4mn  于 2023-01-28  发布在  Go
关注(0)|答案(2)|浏览(344)

我正在编写一个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的消息传递系统已经够难的了,但是这完全把我搞糊涂了。因此,我写了这篇文章。

zi8p0yeb

zi8p0yeb1#

不推荐使用chrome.tabs.getSelected。应改用chrome.tabs.query
chrome.tabs.query需要两个参数:一个查询对象和一个将结果选项卡数组作为参数的回调函数。
您可以通过查询当前窗口中当前活动的所有选项卡来获取“当前选项卡”。

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

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

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);
agxfikkp

agxfikkp2#

另一种方法是从弹出窗口向内容脚本发送消息,然后内容脚本返回URL window.location.href

相关问题