从页面操作中获取标签网址(WebExtensions,Android)

贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述从页面操作中获取标签网址(WebExtensions,Android)相关的知识,希望能为你提供帮助。
我想在页面操作弹出窗口中获取当前选项卡的URL。 起初看起来很明显:只需使用tabs API即可。但是,如果我正确地解读文档,那么在android上似乎不可用。所以我一直在寻找其他东西,并找到了pageAction API的onClicked事件。
pageAction API似乎被列为与Android兼容,onClicked事件被标记为支持。这意味着它实际上会返回一个tabs.Tab对象。但它真的吗?有人试过吗?
检索URL的最佳方法是什么?我知道我可以使用内容脚本,让它在每个选项卡中运行,并创建一个长期的消息传递连接,以便在请求时将URL发送到页面操作弹出窗口。但是,与使用标签API的容易程度相比,这会非常低效并使代码变得非常复杂。
还有什么我能做的吗?
答案 Current (Firefox 54 and later)从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; });

Prior to Firefox 54如果已定义页面/浏览器操作弹出窗口如果您已为页面/浏览器操作定义了弹出窗口,则onClicked事件不会触发。创建/显示弹出窗口时,不会传递任何信息。因此,您将不会收到tabs.Tab对象。获取标签信息的常用方法来自tabs.query,正如您已经确定的那样,它在Firefox for Android中尚未提供。
APIs available to Firefox on Android非常有限。对于您想要做的事情,使用webNavigation事件来记录每个选项卡的第0帧URL将比每个页面中的内容脚本更有效。您可以根据需要使用webNavigation.onCommittedwebNavigation.onCompleted事件。您需要假设当前窗口的活动选项卡是最近有webNavigation事件的选项卡,或者您也可以监视webRequest事件。但是,无论您采用哪种方式,您认为哪个选项卡都是当前选项卡只是一个假设,在某些情况下会不准确。
A more accurate URL (and active tab determination) requires using a content script
如果正在访问的页面通过某种不触发导航的方法更改选项卡的URL,则使用webNavigation事件将不会为您提供更新的URL。正如您所知,没有tabs API,唯一的方法是确定您有选项卡的实际当前URL,当您定义实际页面/浏览器操作弹出窗口(因此没有获得tabs.Tab对象)时,是将内容脚本注入每个页面。您将需要内容脚本来不断更新URL,或者使用storage.onChanged监听来自后台/弹出脚本的请求。由于没有storage API(即没有tabs),必须通过tabs.sendMessage API完成从后台/弹出脚本到内容脚本的通信。
使用页面/浏览器操作onClicked我没有尝试在Android上使用Firefox的另一种方法是不定义实际的页面/浏览器动作弹出窗口。如果您没有定义实际弹出窗口,则会收到onClicked事件(使用活动选项卡的ID和URL获取tabs.Tab对象)然后可以open a pseudo-popup1。
1.在我的链接答案中打开伪弹出窗口的实现使用tabswindows API,这些API目前都不适用于Android版Firefox。可以重写它以使用上面提到的webNavigation监听器来跟踪选项卡URL和window.open()来打开用于伪弹出窗口的窗口。同样,我还没有在Android上用Firefox测试这个,以确定它确实有效。
另一答案你可以通过webextensions以这种方式获得它。考虑到如果要调试弹出窗口,则必须“阻止弹出窗口关闭”(浏览器工具箱右上角的4个方块图标)
var activeTabPromise = browser.tabs.query({active: true, currentWindow: true}); activeTabPromise.then((tabs) => {console.log(tabs[0].url); });

【从页面操作中获取标签网址(WebExtensions,Android)】我希望这能帮到您,

    推荐阅读