通常不喜欢问这类开放式问题,但是我找不到非常可靠的可靠文档(无论是独立的还是来自Google的文档),并且教程和示例都相互冲突。
目前,我正在与chrome.commands.onCommand
以及chrome.tabs.onCreated
和chrome.tabs.onActivated
一起工作,但是我也对一般准则感兴趣(在我看来这是不可能的)。我发现了一些资源,例如this one和the samples,但是样本大部分是一个内衬(WHY),我发现的唯一有用的SO链接特别指出该帖子特定于该API。 / p>
我正在使用一个永久性的背景页面(因为这样的答案很重要),并且真的很喜欢文档中的引用:
如果在安装或升级扩展程序时需要进行一些初始化,请侦听runtime.onInstalled事件。这是注册声明性WebRequest规则,contextMenu条目以及其他此类一次性初始化的好地方
但是我目前正在runtime.onInstalled
中进行所有注册,并且丢失了绑定(当浏览器崩溃并重新启动时,丢失了快捷键(制表符似乎仍然起作用,但依赖于绑定,因此我无法确定))。我认为键盘绑定是一次性的初始化事情,但显然不是。我可以将键绑定移动到onStartup,因为我知道它在onInstalled中不起作用,但是我更愿意了解扩展的最佳实践(谁在乎我是否对某些随机库不使用最佳实践,但是扩展都是关于最佳代码imo)。
任何帮助将不胜感激,如果需要任何其他信息,请随时发表评论并让我知道。我希望不必提出一个最低限度的示例,但如果可能的话,将其保留在chrome.commands
,chrome.tabs
的准则以及持久性页面的常规准则中(尽管事件页面是感谢,因为似乎没有好的资源,以后其他人可能会发现这个问题。
答案 0 :(得分:0)
给出@wOxxOm和@ err1100的有用信息,我决定自行回答此问题。我喜欢在问题中使用注释进行澄清,但是我经常看到SO用户在注释中回答问题,而不是发布答案(也许是因为注释中的答案通常比陈述答案更具对话性),但是无论哪种方式我都认为问题应该得到答案。如果他们中的任何一个发布了答案,我都会接受第一个发布,或者其他人发布的答案要好得多(不要窃取他们的信用)。
持久性页面显然在不同的浏览器中具有更好的支持,因此在这种情况下(至少自2018年11月24日起)应优先考虑使用。否则,如果扩展程序仅适用于Chrome,则考虑使用事件页面,因为很少需要持久性。
上下文菜单和任何带有declarativeXXXX
命名方式的东西都应该在onInstalled
事件中初始化一次,但是没有很多其他事情需要一次性初始化。
对于永久性页面,脚本只加载一次,除非关闭浏览器,否则永远不会卸载,因此onStartup
没什么用。
如上所述,由于该脚本在每次重新启动浏览器时仅加载一次(并且如果已安装在已经运行的浏览器中,则仅运行一次),因此每个浏览会话的初始化都可以在此处完成。
我对非永久性页面的用途一无所知(我相信这是wOxxOm所指的事件页面,因为在谷歌搜索中我需要解散文档并重定向到没有术语的文档),在此问题之前,我将针对可能在同一条船上的那些人进行清理。运行了一个非持久性脚本(在某些时候,IDK不会对其进行测试)并注册它的事件侦听器。此后脚本消失,但侦听器保持不变,这意味着可以使用onInstalled
和onStartup
进行初始化(因为我确定这些是何时运行的,而不是运行非持久性页面脚本的运行时间),并且所有您注册以侦听的事件将重新激活脚本的该部分(实际上只是运行提供的回调,但无论如何)。
就像持久性页面一样,此功能也需要一次初始化。
如果创建事件页面,我不会在脚本中保留任何代码,也不会在侦听器中保留所有内容,但是我对事件页面不甚了解,因此如果有人评论错误,我将对其进行更新。每次浏览器重新启动时都需要初始化的内容将在此侦听器中。
如上所述,我对事件脚本没有很好的了解,但似乎脚本中的唯一代码应该是用于设置侦听器以及侦听器所需的任何变量。脚本中不应出现任何重要的脚本,但是您必须按照自己的意愿进行扩展(或仅使用永久性页面)。