如何使用 chrome.tabs.getCurrent 在 Chrome 扩展程序中获取页面对象?
Posted
技术标签:
【中文标题】如何使用 chrome.tabs.getCurrent 在 Chrome 扩展程序中获取页面对象?【英文标题】:How do you use chrome.tabs.getCurrent to get the page object in a Chrome extension? 【发布时间】:2011-10-06 18:58:33 【问题描述】:该代码旨在将用户正在查看的页面的当前选项卡对象输出到控制台,但它只是输出未定义的。它在浏览器操作页面中运行。
chrome.tabs.getCurrent( function(tab)
console.log(tab);
);
我查看了documentation,据我所知,代码似乎与它所说的相符。
【问题讨论】:
浏览器操作弹出页面不属于任何选项卡,因此tabs.getCurrent()
将不起作用。相反,serg 对tabs.getSelected()
的回答应该可以解决问题。
【参考方案1】:
getSelected()
方法自 Google Chrome 16 起已被弃用(但官方文档中的许多文章尚未更新)。 Official message is here。要获取在指定窗口中选择的选项卡,请使用 chrome.tabs.query()
和参数 'active': true
。所以现在它应该是这样的:
chrome.tabs.query( currentWindow: true, active: true , function (tabs)
console.log(tabs[0]);
);
【讨论】:
这总是在回调中返回0长度数组( 如果在一个桌面上我打开了 2 个 chrome 窗口,每个窗口都显示一个选项卡,在这种情况下是否可以有 >1 个活动选项卡? @lsheng : 是的,所以使用currentWindow: true
来限制它(或遍历它们)
那么为什么chrome.tabs.getCurrent
不能在 OP 的代码中工作呢?这也是我的问题。
仍然相关...... 7 年后我不知道他们为什么不更新他们的文档【参考方案2】:
试试:
chrome.tabs.getSelected(null, function(tab)
console.log(tab);
);
【讨论】:
已弃用,请参阅下面@konstantin 的答案。getCurrent()
与已弃用的getSelected()
或下面的答案几乎不同,第一种方法从脚本运行的位置获取选项卡,而第二种方法获取当前选择的(活动)标签
如何获取innerhtml?【参考方案3】:
由于chrome.tabs
仅在后台或弹出脚本中可用,并且后台脚本在任何选项卡中均无效,因此chrome.tabs.getCurrent()
始终返回undefined
。
相反,我们可以从任何消息侦听器回调的第二个参数中检索活动的Tab
对象。例如,
browser.runtime.onMessage.addListener((message, sender) =>
console.log('Active Tab ID: ', sender.tab.id);
);
【讨论】:
这是唯一对我有用的!!!非常感谢!【参考方案4】:如果从非选项卡上下文(例如,背景页面或弹出视图)调用,则可能未定义。
看来您不应该在bg.js
中使用此代码,而应该在cs.js
中使用。
【讨论】:
欢迎来到 SO,我们感谢您的意见。请客气一点,再具体一点,我不确定引号是干什么用的 - 请提及您引用的对象还有:什么是 this 代码。请编辑您的问题。 它来自谷歌官方文档 chrome.tabs。 developer.chrome.com/extensions/tabs#method-getCurrent。不幸的是,我在cs.js中试过了,还是不行。这是一个错误哈哈 这更像是您可以从具有浏览器选项卡的页面调用它。例如:选项页面。【参考方案5】:如果您遇到这个问题,可能是因为在错误的地方使用了chrome.tabs.getCurrent()
。
您 can't
在内容脚本中使用 chrome.tabs
。
但您可以在background
或options
脚本中使用它。
由于使用了 Promises,此示例需要 Manifest。此外,内容脚本不能使用 tabs.query。
【讨论】:
以上是关于如何使用 chrome.tabs.getCurrent 在 Chrome 扩展程序中获取页面对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?