使用WebExtensions api,如何在浏览器启动时运行一些代码?我需要能够区分浏览器重启事件和正常启动事件。
在WebExtensions之前,可以通过检查此post中提到的loadReason来完成。参考:MDN docs。
一种方法是监听windows.onCreated事件,然后检查它是否是创建的第一个窗口(MDN docs)。但是,我没有看到使用此方法区分浏览器重启事件的方法。
编辑:
我的用例:打开浏览器时我需要打开几个标签。但是,当我因任何原因重新启动浏览器时,我不希望打开标签页(例如:安装更新)。
编辑1:
检查是否存在已打开相同网址的标签将无法始终正常工作,因为某些网址会重定向到另一个网页(例如登录页面),这会导致网址不匹配,并且标签会再次打开。< / p>
答案 0 :(得分:1)
我不确定“正常启动事件”是什么意思,浏览器启动之外的扩展启动只会发生在第一次安装,手动解除/启用或扩展更新等相对不常见的事件上。
但无论如何,runtime.onStartup事件就是你想要的: https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/onStartup
答案 1 :(得分:1)
您最好的选择可能是跟踪您在background.js中打开的标签的网址和标签。 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/onCreated
let tabUrls = [];
function handleCreated(tab) {
tabUrls[tab.id] = tab.url;
}
browser.tabs.onCreated.addListener(handleCreated);
然后,您必须订阅onUpdated事件以跟踪您打开的标签的先前网址。 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/onUpdated
function handleUpdated(tabId, changeInfo, tabInfo) {
if (changeInfo.url && tabUrls[tabId] != null) {
tabUrls[tabId] = changeInfo.url;
}
}
browser.tabs.onUpdated.addListener(handleUpdated);
然后您必须订阅https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/onRemoved以删除您已关闭的标签页。
function handleRemoved(tabId, removeInfo) {
tabUrls[tabId] = null;
}
browser.tabs.onRemoved.addListener(handleRemoved);
要在浏览器(重新)启动时保持这些更改,您需要在创建,更新或删除选项卡时使用tab.rorage.local保存tabUrls变量(没有tabIds):
function updateStorage(){
browser.storage.local.set("urlValues", Object.values(tabUrls)); // Store URLs without tab ids. They will probably not be the same after a restart or quit, you can only assume the urls are correct
}
后续步骤:
您可以使用webRequest https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest查看您请求的网页是否为重定向(statusCode = 302或301 - 请参阅https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest/onHeadersReceived)