Claude Skills Guide

Chrome Extension Periodic Table Reference: Developer Guide

Chrome extensions transform the browsing experience by adding functionality directly into the browser. Understanding the relationships between extension components, APIs, and manifest configurations is essential for building robust extensions. This guide provides a systematic reference for developers working with Chrome extension architecture.

Core Extension Components

A Chrome extension consists of several interconnected components that work together. The manifest file serves as the configuration center, defining permissions, content scripts, background workers, and popup interfaces.

Manifest Configuration

The manifest.json file is the entry point for every extension:

{
  "manifest_version": 3,
  "name": "My Extension",
  "version": "1.0",
  "permissions": ["storage", "activeTab", "scripting"],
  "action": {
    "default_popup": "popup.html",
    "default_icon": "icon.png"
  },
  "background": {
    "service_worker": "background.js"
  },
  "content_scripts": [{
    "matches": ["<all_urls>"],
    "js": ["content.js"]
  }]
}

Manifest V3 introduced significant changes from V2, particularly the replacement of background pages with service workers and modifications to declarative net request rules.

API Categories and Permissions

Chrome provides extensive APIs organized by functionality. Each category requires specific permissions in the manifest.

Storage APIs

The storage API persists data across sessions:

// Saving data
chrome.storage.local.set({ key: "user preferences" }).then(() => {
  console.log("Data saved successfully");
});

// Retrieving data
chrome.storage.local.get(["key"]).then((result) => {
  console.log("Retrieved:", result.key);
});

Storage options include local (persistent), sync (cloud-synced), and managed (admin-controlled) storage.

Messaging APIs

Communication between extension components uses message passing:

// From content script to background
chrome.runtime.sendMessage({ 
  action: "fetchData", 
  url: "https://api.example.com/data" 
}).then((response) => {
  console.log("Response:", response);
});

// In background service worker
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  if (message.action === "fetchData") {
    fetch(message.url)
      .then(res => res.json())
      .then(data => sendResponse(data));
    return true; // Keep message channel open for async response
  }
});

Content Script Patterns

Content scripts run in the context of web pages, enabling direct DOM manipulation. They operate in an isolated world, meaning they cannot access page JavaScript variables but can modify the DOM.

DOM Manipulation

// Creating and injecting elements
const container = document.createElement("div");
container.id = "my-extension-root";
container.style.cssText = "position: fixed; top: 10px; right: 10px; z-index: 999999;";

const button = document.createElement("button");
button.textContent = "Click Me";
button.addEventListener("click", () => {
  chrome.runtime.sendMessage({ action: "buttonClicked" });
});

container.appendChild(button);
document.body.appendChild(container);

Communicating with Page Scripts

To share data between content scripts and page JavaScript, use custom events:

// Content script dispatching to page
const event = new CustomEvent("myExtensionEvent", { 
  detail: { data: "important information" } 
});
document.dispatchEvent(event);

// Page script listening
document.addEventListener("myExtensionEvent", (e) => {
  console.log("Received:", e.detail.data);
});

Service Worker Best Practices

Background service workers handle events when no extension UI is visible. They must be efficient and handle the asynchronous nature of Chrome APIs.

Event Handling

// Browser action click handler
chrome.action.onClicked.addListener((tab) => {
  chrome.tabs.sendMessage(tab.id, { action: "toggleFeature" });
});

// Install/update handlers
chrome.runtime.onInstalled.addListener((details) => {
  if (details.reason === "install") {
    // First-time setup
    chrome.storage.local.set({ firstRun: true });
  } else if (details.reason === "update") {
    // Migration logic for updates
    console.log("Extension updated from version:", details.previousVersion);
  }
});

Extension Contexts Reference

Understanding where your code executes is critical for debugging and architecture:

Context Access Limitations
Popup Chrome APIs Closes on blur
Content Script Page DOM Isolated world
Background All Chrome APIs No DOM access
Options Page Chrome APIs User-initiated

Common Patterns for Power Users

Keyboard Shortcuts

Define commands in manifest:

"commands": {
  "toggle-feature": {
    "suggested_key": "Ctrl+Shift+F",
    "description": "Toggle the main feature"
  }
}

Handle in background:

chrome.commands.onCommand.addListener((command) => {
  if (command === "toggle-feature") {
    chrome.tabs.query({ active: true, currentWindow: true })
      .then(([tab]) => {
        chrome.tabs.sendMessage(tab.id, { action: "toggle" });
      });
  }
});

Declarative Content Matching

Control when content scripts load:

"content_scripts": [{
  "matches": ["https://*.example.com/*"],
  "exclude_matches": ["*://*/admin/*"],
  "js": ["content.js"],
  "run_at": "document_idle"
}]

Debugging Tips

Effective debugging requires understanding Chrome’s extension architecture:

  1. Service Worker Logs: Use chrome://extensions and click “Service Worker” to access console output
  2. Content Script Debugging: Right-click page → Inspect → Content scripts tab
  3. Network Inspection: Popup and background scripts appear in Network tab with “Extension” filter

Security Considerations

Always follow security best practices:

Building for Production

Before publishing to Chrome Web Store:

  1. Test across multiple Chrome versions
  2. Verify permissions are minimal and justified
  3. Compress images and assets
  4. Include clear privacy policy if accessing user data
  5. Test with Chrome’s Lighthouse audit for extensions

The Chrome extension ecosystem offers tremendous flexibility for enhancing browser functionality. By understanding these core patterns and APIs, developers can build extensions that are performant, secure, and provide genuine value to users.

Built by theluckystrike — More at zovo.one