应用运行时和事件页面负责管理应用生命周期。应用运行时管理应用安装、控制事件页面,并可以随时关闭应用。事件页面会监听应用运行时的事件,并管理启动内容和启动方式。
生命周期的运作方式
应用运行时从用户桌面加载事件页面,并且会触发 onLaunch()
事件。此事件会告知事件页面要启动的窗口及其尺寸。
如果事件页面中没有正在执行的 JavaScript、没有待处理的回调和已打开的窗口,运行时会卸载事件页面并关闭应用。在卸载事件页面之前,会触发 onSuspend()
事件。这样一来,活动页面便有机会在应用关闭之前执行简单的清理任务。
创建活动页面和窗口
所有应用都必须包含活动页面。此页面包含应用的顶级逻辑,该应用没有自己的界面,并负责为所有其他应用页面创建窗口。
创建活动页面
如需创建活动页面,请在应用清单中添加“background”字段,并在脚本数组中添加 background.js
。活动页面使用的所有库脚本都需要先添加到“background”字段中:
"background": {
"scripts": [
"foo.js",
"background.js"
]
}
您的活动页面必须包含 onLaunched()
函数。当您的应用以任何方式启动时,系统会调用此函数:
chrome.app.runtime.onLaunched.addListener(function() {
// Tell your app what to launch and how.
});
创建窗口
活动网页可以自行决定创建一个或多个窗口。默认情况下,这些窗口通过与活动页面的脚本连接创建,并可直接由活动页面编写脚本。
Chrome 应用中的窗口不会与任何 Chrome 浏览器窗口相关联。它们有一个包含标题栏和大小控件的可选框架以及推荐的窗口 ID。没有 ID 的 Windows 在重启后不会恢复为其大小和位置。
以下是通过 background.js
创建的示例窗口:
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create('main.html', {
id: 'MyWindowID',
bounds: {
width: 800,
height: 600,
left: 100,
top: 100
},
minWidth: 800,
minHeight: 600
});
});
包含发布数据
您可能需要在活动页面中处理启动数据,具体取决于应用的启动方式。默认情况下,当应用由应用启动器启动时,没有任何启动数据。对于具有文件处理程序的应用,您需要处理 launchData.items
参数,以允许使用文件启动它们。
监听应用运行时事件
应用运行时控制应用的安装、更新和卸载。您无需执行任何操作来设置应用运行时,但事件页面可以监听 onInstalled()
事件以存储本地设置,以及监听 onSuspend()
事件以在事件页面卸载之前执行简单的清理任务。
存储本地设置
当您的应用首次安装或更新时,系统会调用 chrome.runtime.onInstalled()
。每次调用此函数时,都会触发 onInstalled
事件。事件页面可以监听此事件,并使用 Storage API 存储和更新本地设置(另请参阅存储选项)。
chrome.runtime.onInstalled.addListener(function() {
chrome.storage.local.set(object items, function callback);
});
防止数据丢失
用户可以随时卸载您的应用。卸载后,不会留下任何正在执行的代码或私有数据。这可能会导致数据丢失,因为用户可能卸载的应用包含在本地修改的未同步数据。您应存储数据以防止数据丢失。
您至少应存储用户设置,以便用户重新安装您的应用时,其信息仍可重复使用。使用 Storage API (storage.sync),用户数据可以与 Chrome 同步功能自动同步。
在应用关闭之前进行清理
应用运行时会在卸载之前将 onSuspend()
事件发送到事件页面。您的事件页面可以监听此事件,在应用关闭之前执行清理任务并保存状态。
触发此事件后,应用运行时会启动应用关闭过程。如果应用有打开的窗口,将来可以通过 onRestarted
事件重启。在这种情况下,应用应将其当前状态保存到永久性存储空间,以便在收到 onRestarted
事件后,能够以相同状态重启。应用只有几秒钟的时间可以保存其状态,之后就会终止,因此建议在应用正常运行时逐步保存应用状态。
收到 onSuspend
后,除非出于某种原因中止暂停,否则不会再向应用发送任何事件。在这种情况下,onSuspendCanceled
将传递给应用,并且应用不会被卸载。
chrome.runtime.onSuspend.addListener(function() {
// Do some simple clean-up tasks.
});