Chrome Extension Web Accessible Resources — Manifest V3 Guide

3 min read

Web Accessible Resources in Manifest V3

Introduction

MV2 vs MV3

manifest.json Setup

"web_accessible_resources": [{
  "resources": ["images/*.png", "inject.css", "widget.html"],
  "matches": ["https://*.example.com/*"]
}, {
  "resources": ["shared-data.json"],
  "extension_ids": ["abcdefghijklmnop"]
}, {
  "resources": ["content-styles.css"],
  "matches": ["<all_urls>"],
  "use_dynamic_url": true
}]

Accessing Resources

// From content script or web page
const url = chrome.runtime.getURL("images/icon.png");
// Returns: chrome-extension://<extension-id>/images/icon.png

// In content script — inject CSS
const link = document.createElement("link");
link.rel = "stylesheet";
link.href = chrome.runtime.getURL("inject.css");
document.head.appendChild(link);

Fields

use_dynamic_url

Common Use Cases

Content Script + WAR Pattern

// content.js — inject extension UI into page
const container = document.createElement("div");
container.innerHTML = `<iframe src="${chrome.runtime.getURL('widget.html')}" style="..."></iframe>`;
document.body.appendChild(container);

Security Considerations

Common Mistakes

Part of the Chrome Extension Guide by theluckystrike. Built at zovo.one.