javascript - Chrome 扩展 : Get current tab from popup

标签 javascript google-chrome message

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

最佳答案

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

关于javascript - Chrome 扩展 : Get current tab from popup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13359421/

相关文章:

android - 如何在 Android 中处理服务信息

c# - 在C#中实现消息/订阅机制

javascript - 从国际电话输入插件 Javascript 中选择后填充状态下拉列表

javascript - Promise.any() 和 Promise.race() 有什么区别

javascript - 以下文档我无法创建 Vue.js 3 的实例

silverlight - Chrome 无法解压缩 gzip,内容长度

PHP 形式与...冲突。

JavaScript 在新标签页中打开,而不是 Chrome 浏览器中的窗口

jquery - javascript 滚动滞后 - Chrome

jsf - 如何在页面加载期间添加 FacesMessage?使用@PostConstruct似乎不起作用