An extension can declare both required and optional permissions. In general, you should:
Advantages of required permissions:
Advantages of optional permissions:
Declare optional permissions in your extension
manifest with the optional_permissions key, using the
same format as the permissions
field:
{
"name": "My extension",
...
"optional_permissions": [ "tabs", "http://www.google.com/" ],
...
}
You can specify any of the following as optional permissions:
If you want to request hosts that you only discover at runtime, include
"http://*/" and/or "https://*/" as an
optional_permission. This lets you specify any origin in
$(ref:Permissions.origins) as long as it has a matching scheme.
Request the permissions from within a user gesture using
permissions.request():
document.querySelector('#my-button').addEventListener('click', function(event) {
// Permissions must be requested from inside a user gesture, like a button's
// click handler.
chrome.permissions.request({
permissions: ['tabs'],
origins: ['http://www.google.com/']
}, function(granted) {
// The callback argument will be true if the user granted the permissions.
if (granted) {
doSomething();
} else {
doSomethingElse();
}
});
});
Chrome prompts the user if adding the permissions results in different warning messages than the user has already seen and accepted. For example, the previous code might result in a prompt like this:
To check whether your extension has a specific permission or set of
permissions, use permission.contains():
chrome.permissions.contains({
permissions: ['tabs'],
origins: ['http://www.google.com/']
}, function(result) {
if (result) {
// The extension has the permissions.
} else {
// The extension doesn't have the permissions.
}
});
You should remove permissions when you no longer need them.
After a permission has been removed, calling
permissions.request() usually adds the permission back without
prompting the user.
chrome.permissions.remove({
permissions: ['tabs'],
origins: ['http://www.google.com/']
}, function(removed) {
if (removed) {
// The permissions have been removed.
} else {
// The permissions have not been removed (e.g., you tried to remove
// required permissions).
}
});