当前(Firefox 54 及更高版本)
从 Firefox 54 开始,tabs API 在 Firefox for Android 中可用。这意味着您可以使用桌面 Firefox 可用的常规方法。具体来说,chrome.tabs.query() or browser.tabs.query()。但是,您将需要 activeTab 和/或 tabs permissions 在您的 manifest.json 中。
chrome.tabs.query:
chrome.tabs.query({active:true,currentWindow:true},function(tabs){
//'tabs' will be an array with only one element: an Object describing the active tab
// in the current window.
var currentTabUrl = tabs[0].url;
});
browser.tabs.query:
browser.tabs.query({active:true,currentWindow:true}).then(function(tabs){
//'tabs' will be an array with only one element: an Object describing the active tab
// in the current window.
var currentTabUrl = tabs[0].url;
});
Firefox 54 之前的版本
如果您定义了页面/浏览器操作弹出窗口
如果您为页面/浏览器操作定义了弹出窗口,则不会触发 onClicked 事件。您的弹出窗口在创建/显示时未传递任何信息。因此,您不会收到tabs.Tab 对象。获取标签信息的常规方法是从tabs.query,正如您已经确定的那样,它在 Firefox for Android 中(还)不可用。
APIs available to Firefox on Android 非常有限。对于您想要做的事情,使用webNavigation 事件来记录每个选项卡的第 0 帧 URL 将比每个页面中的内容脚本更有效。您可以根据需要使用webNavigation.onCommitted 或webNavigation.onCompleted 事件。您需要假设当前窗口的活动选项卡是最近发生webNavigation 事件的选项卡,或者您也可以监视webRequest 事件。但是,无论您采取何种方式,您假设哪个选项卡是当前选项卡都只是一个假设,并且在某些情况下将不准确。
更准确的 URL(和活动标签确定)需要使用内容脚本
如果正在访问的页面通过某种不会触发导航的方法更改选项卡的 URL,则使用 webNavigation 事件不会为您提供更新后的 URL。正如您所确定的,如果没有 tabs API,当您定义实际的页面/浏览器操作弹出窗口时,唯一确定您拥有选项卡当前 URL 的唯一方法(因此不会获得 tabs.Tab 对象),就是在每个页面中注入一个内容脚本。您将需要内容脚本来不断更新 URL,或者通过 storage.onChanged 侦听背景/弹出脚本中对该信息的请求。由于没有tabs API(即没有tabs.sendMessage),必须通过storage API 来完成从后台/弹出脚本到内容脚本的通信。
使用页面/浏览器操作onClicked
我还没有在 Android 上的 Firefox 上尝试过的另一种方法是不定义实际的页面/浏览器操作弹出窗口。如果您没有定义实际的弹出窗口,您会收到 onClicked 事件(获取带有活动选项卡 ID 和 URL 的 tabs.Tab 对象)然后可以open a pseudo-popup1。
1。在我的链接答案中打开一个伪弹出窗口的实现使用了 tabs 和 windows API,这两个 API 目前都不适用于 Firefox for Android。可以重写它以使用上面提到的webNavigation 侦听器来跟踪选项卡 URL,并使用window.open() 打开用于伪弹出窗口的窗口。同样,我还没有在 Android 上使用 Firefox 进行测试以确定它确实有效。