Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firefox Webextensions:在浏览器启动时运行代码_Firefox_Firefox Addon Webextensions - Fatal编程技术网

Firefox Webextensions:在浏览器启动时运行代码

Firefox Webextensions:在浏览器启动时运行代码,firefox,firefox-addon-webextensions,Firefox,Firefox Addon Webextensions,使用WebExtensionsAPI,如何在浏览器启动时运行一些代码?我需要能够区分浏览器重启事件和正常启动事件 在WebExtensions之前,可以通过检查本文中提到的loadReason来完成。参考文献: 一种方法是侦听windows.onCreated事件,然后检查它是否是创建的第一个窗口()。但是,我看不到使用此方法区分浏览器重启事件的方法 编辑: 我的用例:当浏览器打开时,我需要打开几个选项卡。但是,无论出于何种原因(例如:安装更新),我都不希望在重新启动浏览器时打开选项卡 编辑1:

使用WebExtensionsAPI,如何在浏览器启动时运行一些代码?我需要能够区分浏览器重启事件和正常启动事件

在WebExtensions之前,可以通过检查本文中提到的loadReason来完成。参考文献:

一种方法是侦听windows.onCreated事件,然后检查它是否是创建的第一个窗口()。但是,我看不到使用此方法区分浏览器重启事件的方法

编辑:

我的用例:当浏览器打开时,我需要打开几个选项卡。但是,无论出于何种原因(例如:安装更新),我都不希望在重新启动浏览器时打开选项卡

编辑1:


检查是否有相同url已打开的选项卡并不总是能正常工作,因为某些url重定向到另一个页面(例如登录页面),这将导致url不匹配并再次打开选项卡。

我不确定您所说的“正常启动事件”是什么意思,浏览器启动之外的扩展启动只会发生在相对不常见的事件中,如首次安装、手动解除锁定/启用或扩展更新

但在任何情况下,runtime.onStartup事件都是您想要的:

我不确定您所说的“正常启动事件”是什么意思,浏览器启动之外的扩展启动只会发生在相对不常见的事件中,如首次安装、手动解除锁定/启用或扩展更新

但在任何情况下,runtime.onStartup事件都是您想要的:
最好的办法可能是跟踪在background.js中打开的选项卡的URL和选项卡ID

然后,您必须订阅OnUpdate事件,以跟踪您打开的选项卡的以前URL

然后,您必须订阅以删除已关闭的已打开选项卡的URL

function handleRemoved(tabId, removeInfo) {
  tabUrls[tabId] = null;
}

browser.tabs.onRemoved.addListener(handleRemoved);
要在浏览器(重新)启动时保持这些更改,您需要在创建、更新或删除选项卡(不带选项卡ID)时将tabUrls变量保存在browser.storage.local中:

下一步:

  • 初始化background.js时从本地存储读取(只需调用background.js中的函数,您可以调用该函数init或类似的函数),检查当前URL是否与存储的URL或起始URL匹配。如果没有找到匹配项,则应打开该URL
  • 打开所有必需的选项卡后,在一秒钟或更短的时间内删除OnUpdate listener,以防止用户导航影响您的逻辑

您可以使用webRequest查看您请求的页面是否为重定向(statusCode=302或301-请参阅)

您最好的办法可能是跟踪您在background.js中打开的选项卡的URL和选项卡ID

然后,您必须订阅OnUpdate事件,以跟踪您打开的选项卡的以前URL

然后,您必须订阅以删除已关闭的已打开选项卡的URL

function handleRemoved(tabId, removeInfo) {
  tabUrls[tabId] = null;
}

browser.tabs.onRemoved.addListener(handleRemoved);
要在浏览器(重新)启动时保持这些更改,您需要在创建、更新或删除选项卡(不带选项卡ID)时将tabUrls变量保存在browser.storage.local中:

下一步:

  • 初始化background.js时从本地存储读取(只需调用background.js中的函数,您可以调用该函数init或类似的函数),检查当前URL是否与存储的URL或起始URL匹配。如果没有找到匹配项,则应打开该URL
  • 打开所有必需的选项卡后,在一秒钟或更短的时间内删除OnUpdate listener,以防止用户导航影响您的逻辑

您可以使用webRequest查看您请求的页面是否为重定向(statusCode=302或301-请参阅)

谢谢您的回答。所谓正常启动事件,我指的是用户启动浏览器,而不是用户重新启动浏览器以安装更新或出于任何其他原因。我对问题进行了编辑,以使其更清楚。你知道用runtime.onStartup事件来区分浏览器重启的方法吗?我明白了,听起来你真的很关心上一个会话是否已恢复。请注意,即使在“正常启动”中,也可以恢复以前的会话。我不知道如何检测会话重启。是的,似乎没有直接的方法来检测上一个会话是否正在恢复。我将尝试Smile4Ever的答案——希望它能奏效。也许我应该在mozilla论坛上四处询问,看看是否有任何计划来增强现有的api或创建一个新的api来支持这一点。谢谢你的回答。所谓正常启动事件,我指的是用户启动浏览器,而不是用户重新启动浏览器以安装更新或出于任何其他原因。我对问题进行了编辑,以使其更清楚。你知道用runtime.onStartup事件来区分浏览器重启的方法吗?我明白了,听起来你真的很关心上一个会话是否已恢复。请注意,即使在“正常启动”中,也可以恢复以前的会话。我不知道如何检测会话重启。是的,似乎没有直接的方法来检测上一个会话是否正在恢复。我将尝试Smile4Ever的答案——希望它能奏效。也许我应该去mozilla论坛问问,查看是否有任何计划来增强现有api或创建新api以支持此操作。您可以使用browser.tabs api检查要打开的选项卡是否已打开。检查选项卡是否已打开的问题是,某些URL将重定向到另一个页面(例如登录页面),这将导致URL不匹配并再次打开选项卡。并且您不知道要重定向到的URL?不知道。在浏览器启动时打开的URL是可配置的,而不是固定的URL集。因此,插件无法知道所有可能的重定向url。例如,如果用户将其配置为打开bitbuck
function handleRemoved(tabId, removeInfo) {
  tabUrls[tabId] = null;
}

browser.tabs.onRemoved.addListener(handleRemoved);
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
}