我正在编写一个 Chrome 扩展程序,其中一部分需要在单击弹出页面上的按钮时获取当前选项卡的标题和 URL。
我之前曾使用过 Chrome 的消息传递系统,经过大量努力,我成功地在很多场合下使用它。但是,我从来没有将它们用于弹出页面,而且根据我的阅读,这要困难得多。
到目前为止我设法弄清楚的时间表是这样的:
popup.html
/popup.js
:按钮被点击popup.html
/popup.js
:请求/消息发送到内容脚本contentScript.js
: 从弹出页面接收请求/消息contentScript.js
: 当前标签页的标题和 URL 存储在一个变量中contentScript.js
: 2 个变量作为字符串化响应发送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/