mirror of
https://github.com/mdn/webextensions-examples.git
synced 2026-04-16 06:18:35 +02:00
an example using contextualIdentities (#179)
This commit is contained in:
13
contextual-identities/README.md
Normal file
13
contextual-identities/README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Contextual Identities
|
||||
|
||||
## What it does
|
||||
|
||||
Lists existing identities, lets you create new tabs with an identity and remove all tabs from an identity. For more information on contextual identities: https://wiki.mozilla.org/Security/Contextual_Identity_Project/Containers
|
||||
|
||||
## What it shows
|
||||
|
||||
How to use the contextualIdentities API. Please note: you must have contextualIdentities enabled. You can do that by going to about:config and setting the `privacy.userContext.enabled` preference to true. If you are using web-ext you can do this by running:
|
||||
|
||||
web-ext run --pref privacy.userContext.enabled=true
|
||||
|
||||
Icon from: https://www.iconfinder.com/icons/290119/card_id_identification_identity_profile_icon#size=128, License: "Free for commercial use".
|
||||
0
contextual-identities/background.js
Normal file
0
contextual-identities/background.js
Normal file
18
contextual-identities/context.css
Normal file
18
contextual-identities/context.css
Normal file
@@ -0,0 +1,18 @@
|
||||
html, body {
|
||||
width: 350px;
|
||||
}
|
||||
|
||||
a {
|
||||
margin: 10px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.panel {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
span.identity {
|
||||
width: 100px;
|
||||
display: inline-block;
|
||||
margin-left: 1em;
|
||||
}
|
||||
14
contextual-identities/context.html
Normal file
14
contextual-identities/context.html
Normal file
@@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="context.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="panel">
|
||||
<div id="identity-list"></div>
|
||||
</div>
|
||||
<script src="context.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
54
contextual-identities/context.js
Normal file
54
contextual-identities/context.js
Normal file
@@ -0,0 +1,54 @@
|
||||
function eventHandler(event) {
|
||||
if (event.target.dataset.action == 'create') {
|
||||
browser.tabs.create({
|
||||
url: 'about:blank',
|
||||
cookieStoreId: event.target.dataset.identity
|
||||
});
|
||||
}
|
||||
if (event.target.dataset.action == 'close-all') {
|
||||
browser.tabs.query({
|
||||
cookieStoreId: event.target.dataset.identity
|
||||
}).then((tabs) => {
|
||||
browser.tabs.remove(tabs.map((i) => i.id));
|
||||
});
|
||||
}
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
function createOptions(node, identity) {
|
||||
for (let option of ['Create', 'Close All']) {
|
||||
let a = document.createElement('a');
|
||||
a.href = '#';
|
||||
a.innerText = option;
|
||||
a.dataset.action = option.toLowerCase().replace(' ', '-');
|
||||
a.dataset.identity = identity.cookieStoreId;
|
||||
a.addEventListener('click', eventHandler);
|
||||
node.appendChild(a);
|
||||
}
|
||||
}
|
||||
|
||||
var div = document.getElementById('identity-list');
|
||||
|
||||
if (browser.contextualIdentities === undefined) {
|
||||
div.innerText = 'browser.contextualIdentities not available. Check that the privacy.userContext.enabled pref is set to true, and reload the add-on.';
|
||||
} else {
|
||||
browser.contextualIdentities.query({})
|
||||
.then((identities) => {
|
||||
if (!identities.length) {
|
||||
div.innerText = 'No identities returned from the API.';
|
||||
return;
|
||||
}
|
||||
|
||||
for (let identity of identities) {
|
||||
let row = document.createElement('div');
|
||||
let span = document.createElement('span');
|
||||
span.className = 'identity';
|
||||
span.innerText = identity.name;
|
||||
span.style = `color: ${identity.color}`;
|
||||
console.log(identity);
|
||||
row.appendChild(span);
|
||||
createOptions(row, identity);
|
||||
div.appendChild(row);
|
||||
}
|
||||
});
|
||||
}
|
||||
1
contextual-identities/identity.svg
Normal file
1
contextual-identities/identity.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 48 48" height="48px" id="Layer_1" version="1.1" viewBox="0 0 48 48" width="48px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path clip-rule="evenodd" d="M43,42H5c-2.209,0-4-1.791-4-4V17c0-2.209,1.791-4,4-4h15V9c0-2.209,1.791-4,4-4 s4,1.791,4,4v4h15c2.209,0,4,1.791,4,4v21C47,40.209,45.209,42,43,42z M17.014,34.488c0,0.003,0,0.004,0,0.004 c-0.004,0-0.018-0.781-0.018-0.781s1.166-0.601,2.031-1.378c0.507-0.417,0.741-1.362,0.741-1.362 c0.137-0.828,0.238-2.877,0.238-3.703c0-2.062-1.033-4.28-4.007-4.28V22.98v0.007c-2.974,0-4.007,2.219-4.007,4.28 c0,0.826,0.102,2.875,0.238,3.703c0,0,0.234,0.945,0.741,1.362c0.865,0.777,2.031,1.378,2.031,1.378s-0.014,0.781-0.018,0.781 c0,0,0-0.001,0-0.004c0,0,0.029,1.146,0.029,1.487c0,1.362-1.365,2.018-2.223,2.018c-0.002,0-0.002,0-0.003,0 c-2.593,0.113-3.205,0.976-3.21,0.984C9.419,39.23,9.199,39.482,8.998,40h14.004c-0.201-0.518-0.421-0.77-0.582-1.022 c-0.005-0.009-0.617-0.871-3.21-0.984c-0.001,0-0.001,0-0.003,0c-0.857,0-2.223-0.655-2.223-2.018 C16.984,35.634,17.014,34.488,17.014,34.488z M26,9c0-1.104-0.896-2-2-2s-2,0.896-2,2v6c0,1.104,0.896,2,2,2s2-0.896,2-2V9z M45,17 c0-1.104-0.896-2-2-2H28c0,2.209-1.791,4-4,4s-4-1.791-4-4H5c-1.104,0-2,0.896-2,2v21c0,1.104,0.896,2,2,2h1.797 c0.231-0.589,0.656-1.549,1.16-2.24c0.025-0.014,0.848-1.739,4.998-1.79c0.006-0.021,0.01-1.042,0.022-1.027 c-0.32-0.202-0.737-0.516-1.051-0.816c-0.255-0.156-1.161-1.029-1.452-2.583c-0.087-0.542-0.488-3.099-0.488-4.166 c0-3.171,1.265-6.381,5.953-6.381c0.021,0,0.1,0,0.121,0c4.688,0,5.953,3.21,5.953,6.381c0,1.067-0.401,3.624-0.488,4.166 c-0.291,1.554-1.197,2.427-1.452,2.583c-0.313,0.301-0.73,0.614-1.051,0.816c0.013-0.015,0.017,1.007,0.022,1.027 c4.151,0.051,4.974,1.776,4.998,1.79c0.504,0.691,0.929,1.651,1.16,2.24H43c1.104,0,2-0.896,2-2V17z M40,26H28c-0.553,0-1-0.447-1-1 s0.447-1,1-1h12c0.553,0,1,0.447,1,1S40.553,26,40,26z M28,30h2c0.553,0,1,0.447,1,1s-0.447,1-1,1h-2c-0.553,0-1-0.447-1-1 S27.447,30,28,30z M28,34h6c0.553,0,1,0.447,1,1s-0.447,1-1,1h-6c-0.553,0-1-0.447-1-1S27.447,34,28,34z M32,31c0-0.553,0.447-1,1-1 h4c0.553,0,1,0.447,1,1s-0.447,1-1,1h-4C32.447,32,32,31.553,32,31z M23,9h2v2h-2V9z" fill-rule="evenodd"/></svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
21
contextual-identities/manifest.json
Normal file
21
contextual-identities/manifest.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"browser_action": {
|
||||
"browser_style": true,
|
||||
"default_title": "Contextual Identities",
|
||||
"default_popup": "context.html",
|
||||
"default_icon": {
|
||||
"128": "identity.svg"
|
||||
}
|
||||
},
|
||||
"homepage_url": "https://github.com/mdn/webextensions-examples/tree/master/contextual-identities",
|
||||
"manifest_version": 2,
|
||||
"name": "Contextual Identities",
|
||||
"version": "1.0",
|
||||
"permissions": [
|
||||
"contextualIdentities",
|
||||
"cookies"
|
||||
],
|
||||
"icons": {
|
||||
"128": "identity.svg"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user