4.4 管理扩展与应用

除了通过chrome://extensions/管理Chrome扩展和应用外,也可以通过Chrome的management接口管理。management接口可以获取用户已安装的扩展和应用信息,同时还可以卸载和禁用它们。通过management接口可以编写出智能管理扩展和应用的程序。

要使用management接口,需要在Manifest中声明management权限:

"permissions": [
    "management"
]

读取用户已安装扩展和应用的信息。Management提供了两个方法获取用户已安装扩展应用的信息,分别是getAllget

chrome.management.getAll(function(exInfoArray){
    console.log(exInfoArray);
});

chrome.management.get(exId, function(exInfo){
    console.log(exInfo);
});

exInfo是扩展信息对象,其结构如下:

{
    id: 扩展id,
    name: 扩展名称,
    shortName: 扩展短名称,
    description: 扩展描述,
    version: 扩展版本,
    mayDisable: 是否可被用户卸载或禁用,
    enabled: 是否已启用,
    disabledReason: 扩展被禁用原因,
    type: 类型,
    appLaunchUrl: 启动url,
    homepageUrl: 主页url,
    updateUrl: 更新url,
    offlineEnabled: 离线是否可用,
    optionsUrl: 选项页面url,
    icons: [{
        size: 图片尺寸,
        url: 图片URL
    }],
    permissions: 扩展权限,
    hostPermissions: 扩展有权限访问的host,
    installType: 扩展被安装的方式
}

其中type属性的可能值为extensionhosted_apppackaged_applegacy_packaged_appthemeinstallType可能的值为admin(管理员安装)、development(载入未打包的扩展)、normal(通过crx正常安装)、sideload(第三方程序安装)或other(其他)。

获取权限警告。getPermissionWarningsByIdgetPermissionWarningsByManifest方法可以获取权限警告,这些警告与用户安装扩展时网上应用商店弹出的警告类似。

chrome.management.getPermissionWarningsById(exId, function(permissionWarningArray){
    console.log(permissionWarningArray);
});

getPermissionWarningsByManifest(exManifest, function(permissionWarningArray){
    console.log(permissionWarningArray);
});

上述代码中,exManifest是字符串型的,不是对象型的。

启用、禁用、卸载扩展和启动应用。setEnabled方法可以启用或禁用扩展应用,如果一个扩展或应用被禁用,它的后台页面不会运行。

chrome.management.setEnabled(exId, enabled, function(){
    if(enabled){
        console.log('Extension '+exId+' has been enabled.');
    }
    else{
        console.log('Extension '+exId+' has been disabled.');
    }
});

卸载扩展有两种方法,uninstall可以卸载指定id的扩展,uninstallSelf可以卸载扩展自身且无需请求management权限。

uninstall(exId, {
    showConfirmDialog: true
}, function(){
    console.log('Extension '+exId+' has been uninstalled.');
});

uninstallSelf({
    showConfirmDialog: true
}, function(){
    console.log('This extension has been uninstalled.');
});

如果不希望在卸载前显示确认窗口,可以将showConfirmDialog的值设为false

通过launchApp方法启动应用:

chrome.management.launchApp(exId, function(){
    console.log('App '+exId+' has been launched.');
});

management接口提供了四种事件,onInstalledonUninstalledonEnabledonDisabled,分别用于监听安装、卸载、启用和禁用扩展应用。

chrome.management.onInstalled.addListener(function(exInfo){
    console.log('Extension '+exInfo.id+' has been installed.')
});

chrome.management.onUninstalled.addListener(function(exId){
    console.log('Extension '+exId+' has been uninstalled.');
});

chrome.management.onEnabled.addListener(function(exInfo){
    console.log('Extension '+exInfo.id+' has been enabled.');
});

chrome.management.onDisabled.addListener(function(exInfo){
    console.log('Extension '+exInfo.id+' has been disabled.');
});

本节讲解了管理扩展和应用的接口内容,看起来有些枯燥,但如果使用恰当设计合理,可以编写出让用户很feel的扩展。