0Pricing
Browser Extensions Development (Chrome & Edge) · Lesson

Adding Context Menu Items

Create custom context menu items that appear when users right-click on web pages, images, or links, triggering extension actions.

Adding Context Menu Items is a free Browser Extensions Development (Chrome & Edge) lesson on CoddyKit — lesson 1 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Browser Extensions Development (Chrome & Edge) learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.

What are Context Menus?

Browser extensions can add custom items to the context menu, which appears when you right-click on a web page.

These items let users perform quick actions related to what they clicked on, like saving an image, translating selected text, or triggering a custom search.

Enabling Context Menus

Before your extension can create context menu items, you need to declare the "contextMenus" permission in your manifest.json file.

This permission tells the browser your extension intends to interact with the context menu API.

{ "manifest_version": 3,
  "name": "My Menu Extension",
  "version": "1.0",
  "permissions": [
    "contextMenus"
  ],
  "background": {
    "service_worker": "background.js"
  }
}

The `chrome.contextMenus` API

The chrome.contextMenus API is how your background service worker interacts with context menus.

It provides methods to manage menu items:

  • create(): To add a new menu item.
  • update(): To change an existing item's properties.
  • remove(): To delete a specific item.
  • removeAll(): To clear all items added by your extension.

Creating Your First Item

To create a context menu item, use chrome.contextMenus.create(). You must provide a unique id and a title.

This example adds a simple item named "My First Item" to the general page context menu.

// background.js
chrome.runtime.onInstalled.addListener(() => {
  chrome.contextMenus.create({
    id: "myFirstItem",
    title: "My First Item",
    contexts: ["page"]
  });
});

Item Properties: ID & Title

Each context menu item needs a unique id. This ID helps you identify which item was clicked later.

The title is the text displayed in the menu. The contexts array specifies where the item should appear.

  • id: A unique string identifier.
  • title: The user-visible text for the menu item.
  • contexts: An array of strings defining where the item shows up.

Responding to Clicks

After creating an item, you'll want to run code when a user clicks it. Use chrome.contextMenus.onClicked.addListener() to listen for these clicks.

The listener receives an info object with details about the click, including the menuItemId, which helps you identify which item was activated.

// background.js
chrome.runtime.onInstalled.addListener(() => {
  chrome.contextMenus.create({
    id: "logClickItem",
    title: "Log This Click",
    contexts: ["page"]
  });
});

chrome.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === "logClickItem") {
    console.log("Item 'Log This Click' was clicked!");
    // You can perform other actions here
  }
});

Context Types for Specific Elements

The contexts property is powerful! It allows you to control exactly where your menu item appears.

Common context types include:

  • "page": Right-click on any part of the page.
  • "selection": Right-click on selected text.
  • "link": Right-click on a hyperlink.
  • "image": Right-click on an image.
  • "video", "audio": For media elements.

Example: Search Selected Text

Let's create an item that appears only when text is selected. When clicked, it will open a new tab to search that text on Google.

Notice the selectionText property in the info object when using the "selection" context.

// background.js
chrome.runtime.onInstalled.addListener(() => {
  chrome.contextMenus.create({
    id: "searchSelected",
    title: "Search '%s' on Google", // %s is placeholder for selected text
    contexts: ["selection"]
  });
});

chrome.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === "searchSelected" && info.selectionText) {
    const query = encodeURIComponent(info.selectionText);
    const url = `https://www.google.com/search?q=${query}`;
    chrome.tabs.create({ url: url });
  }
});

Updating and Removing Items

You can dynamically change or remove context menu items after they've been created. This is useful for adapting to user preferences or page content.

  • chrome.contextMenus.update(id, properties): Changes properties like title or contexts.
  • chrome.contextMenus.remove(id): Deletes a specific item.
  • chrome.contextMenus.removeAll(): Deletes all items added by your extension.

Context Menu Challenge

Consider the following manifest.json and background script for an extension.

Which statements about the context menu items created are true?

// manifest.json
{
  "manifest_version": 3,
  "name": "Test Menu",
  "version": "1.0",
  "permissions": ["contextMenus"],
  "background": {"service_worker": "background.js"}
}

// background.js
chrome.runtime.onInstalled.addListener(() => {
  chrome.contextMenus.create({
    id: "itemA",
    title: "Action A",
    contexts: ["page"]
  });
  chrome.contextMenus.create({
    id: "itemB",
    title: "Action B",
    contexts: ["selection"]
  });
  chrome.contextMenus.create({
    id: "itemC",
    title: "Action C",
    contexts: ["link"]
  });
});

Recap: Context Menus

You've learned how to add custom context menu items to your browser extension!

  • Declare "contextMenus" permission in manifest.json.
  • Use chrome.contextMenus.create() in your background script.
  • Specify id, title, and contexts for each item.
  • Listen for clicks using chrome.contextMenus.onClicked.addListener().
  • Contexts like "page", "selection", "link" allow precise targeting.

These skills enable you to add powerful, context-aware actions to your extension. Next, we'll explore integrating with the Omnibox!

Frequently asked questions

Is the “Adding Context Menu Items” lesson free?

Yes — the full text of “Adding Context Menu Items” is free to read here on the web, and the Browser Extensions Development (Chrome & Edge) course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Browser Extensions Development (Chrome & Edge) course, upgrade to CoddyKit PRO.

What will I learn in “Adding Context Menu Items”?

Create custom context menu items that appear when users right-click on web pages, images, or links, triggering extension actions. You practise Browser Extensions Development (Chrome & Edge) with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.

Do I need any experience to start Browser Extensions Development (Chrome & Edge)?

No prior experience is required. Browser Extensions Development (Chrome & Edge) on CoddyKit is structured for beginners through advanced learners; this is — lesson 1 of 4, so you can start here or from the beginning and move at your own pace.

How long does the “Adding Context Menu Items” lesson take?

Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.

Can I write and run code in this Browser Extensions Development (Chrome & Edge) lesson?

Yes. Every Browser Extensions Development (Chrome & Edge) lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.

All lessons in this course

  1. Adding Context Menu Items
  2. Omnibox Keyword Integration
  3. Responding to Omnibox Input
  4. Keyboard Shortcuts with the Commands API
← Back to Browser Extensions Development (Chrome & Edge)