-
Notifications
You must be signed in to change notification settings - Fork 2.7k
MDN get started tutorial examples to manifest V3 #608
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 3 commits
da2172c
8b43ca9
325f8cb
0892301
313fb9a
e3206f1
4a5d71e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,7 @@ | ||
| { | ||
|
|
||
| "description": "Adds a browser action icon to the toolbar. Click the button to choose a beast. The active tab's body content is then replaced with a picture of the chosen beast. See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Examples#beastify", | ||
| "manifest_version": 2, | ||
| "manifest_version": 3, | ||
| "name": "Beastify", | ||
| "version": "1.0", | ||
| "homepage_url": "https://github.com/mdn/webextensions-examples/tree/master/beastify", | ||
|
|
@@ -10,10 +10,20 @@ | |
| }, | ||
|
|
||
| "permissions": [ | ||
| "activeTab" | ||
| "activeTab", | ||
| "scripting" | ||
| ], | ||
|
|
||
| "browser_action": { | ||
| "browser_specific_settings": { | ||
| "gecko": { | ||
| "id": "[email protected]", | ||
| "data_collection_permissions": { | ||
| "required": ["none"] | ||
| } | ||
| } | ||
| }, | ||
|
|
||
| "action": { | ||
| "default_icon": "icons/beasts-32.png", | ||
| "theme_icons": [{ | ||
| "light": "icons/beasts-32-light.png", | ||
|
|
@@ -25,7 +35,10 @@ | |
| }, | ||
|
|
||
| "web_accessible_resources": [ | ||
| "beasts/*.jpg" | ||
| { | ||
| "resources": [ "beasts/*.jpg" ], | ||
| "matches": [ "*://*/*" ] | ||
| } | ||
| ] | ||
|
|
||
| } | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Revise to use async/await instead of Promise chains. |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -12,7 +12,6 @@ const hidePage = `body > :not(.beastify-image) { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| function listenForClicks() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| document.addEventListener("click", (e) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| /** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| * Given the name of a beast, get the URL to the corresponding image. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -33,25 +32,37 @@ function listenForClicks() { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| * send a "beastify" message to the content script in the active tab. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| function beastify(tabs) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| function beastify(tabs) { | |
| async function beastify(tabs) { |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Revise the function to use async/await.
Warning
This function now takes a single Tab rather than an array of Tabs. Call sites must be updated.
| function beastify(tabs) { | |
| browser.tabs.insertCSS({code: hidePage}).then(() => { | |
| const url = beastNameToURL(e.target.textContent); | |
| browser.tabs.sendMessage(tabs[0].id, { | |
| command: "beastify", | |
| beastURL: url | |
| const tabId = tabs[0].id; | |
| browser.scripting | |
| .insertCSS({ | |
| target: { tabId }, | |
| css: hidePage, | |
| }) | |
| .then(() => { | |
| const url = beastNameToURL(e.target.textContent); | |
| browser.tabs.sendMessage(tabId, { | |
| command: "beastify", | |
| beastURL: url, | |
| }); | |
| }); | |
| }); | |
| } | |
| async function beastify(tab) { | |
| await browser.scripting.insertCSS({ | |
| target: { tabId: tab.id }, | |
| css: hidePage, | |
| }); | |
| const url = beastNameToURL(e.target.textContent); | |
| browser.tabs.sendMessage(tabId, { | |
| command: "beastify", | |
| beastURL: url, | |
| }); | |
| } |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Revise the function to use async/await.
Warning
This function has also been revised to expect a single tab rather than an array of tabs. As such, call sites will also need to be updated.
| function reset(tabs) { | |
| browser.tabs.removeCSS({code: hidePage}).then(() => { | |
| browser.tabs.sendMessage(tabs[0].id, { | |
| command: "reset", | |
| const tabId = tabs[0].id; | |
| browser.scripting | |
| .removeCSS({ | |
| target: { tabId }, | |
| css: hidePage, | |
| }) | |
| .then(() => { | |
| browser.tabs.sendMessage(tabId, { | |
| command: "reset", | |
| }); | |
| }); | |
| }); | |
| } | |
| async function reset(tab) { | |
| await browser.scripting.removeCSS({ | |
| target: { tabId: tab.id }, | |
| css: hidePage, | |
| }); | |
| browser.tabs.sendMessage(tabId, { command: "reset" }); | |
| } |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Revise the if block to use async/await conventions.
Since the query for the current tab is common to both blocks, we can move it above the if statements. Similarly, since the reportError error handler is common across both branches of the if statement, we can move it into a catch that wraps the entire if/else block.
| if (e.target.type === "reset") { | |
| browser.tabs.query({active: true, currentWindow: true}) | |
| browser.tabs | |
| .query({ active: true, currentWindow: true }) | |
| .then(reset) | |
| .catch(reportError); | |
| } else { | |
| browser.tabs.query({active: true, currentWindow: true}) | |
| browser.tabs | |
| .query({ active: true, currentWindow: true }) | |
| .then(beastify) | |
| .catch(reportError); | |
| } | |
| const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); | |
| try { | |
| if (e.target.type === "reset") { | |
| await reset(tab); | |
| } else { | |
| await beastify(tab); | |
| } | |
| } catch (error) { | |
| reportError(error); | |
| } |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| browser.tabs | |
| .query({ active: true, currentWindow: true }) | |
| .then(([tab]) => | |
| browser.scripting.executeScript({ | |
| target: { tabId: tab.id }, | |
| files: ["/content_scripts/beastify.js"], | |
| }) | |
| ) | |
| .then(listenForClicks) | |
| .catch(reportExecuteScriptError); | |
| (function runOnPopupOpened() { | |
| try { | |
| const [tab] = browser.tabs.query({ active: true, currentWindow: true }); | |
| await browser.scripting.executeScript({ | |
| target: { tabId: tab.id }, | |
| files: ["/content_scripts/beastify.js"], | |
| }); | |
| listenForClicks(); | |
| } catch(e) { | |
| reportExecuteScriptError(e); | |
| } | |
| })(); |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -1,14 +1,23 @@ | ||||||
| { | ||||||
|
|
||||||
| "description": "Adds a solid red border to all webpages matching mozilla.org. See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Examples#borderify", | ||||||
| "manifest_version": 2, | ||||||
| "manifest_version": 3, | ||||||
| "name": "Borderify", | ||||||
| "version": "1.0", | ||||||
| "homepage_url": "https://github.com/mdn/webextensions-examples/tree/master/borderify", | ||||||
| "icons": { | ||||||
| "48": "icons/border-48.png" | ||||||
| }, | ||||||
|
|
||||||
| "browser_specific_settings": { | ||||||
| "gecko": { | ||||||
| "id": "[email protected]", | ||||||
|
||||||
| "id": "borderify@example.com", | |
| "id": "borderify@mozilla.org", |
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See this comment for details.