{ "webextensions": { "manifest": { "content_scripts": { "__compat": { "mdn_url": "https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts", "spec_url": "https://w3c.github.io/webextensions/specification/#key-content_scripts", "support": { "chrome": { "version_added": "≤54", "notes": "Content scripts are not applied to tabs already open when the extension is loaded." }, "edge": { "version_added": "14" }, "firefox": { "version_added": "48" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "14", "notes": "Content scripts are not applied to tabs until the user grants permission via the extension's access popover in the toolbar." }, "safari_ios": { "version_added": "15", "notes": "Content scripts are not applied to tabs until the user grants permission via the extension's access alert." } } }, "all_frames": { "__compat": { "support": { "chrome": { "version_added": "≤72" }, "edge": { "version_added": "14" }, "firefox": { "version_added": "48" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "14" }, "safari_ios": { "version_added": "15" } } } }, "css": { "__compat": { "support": { "chrome": { "version_added": "≤72" }, "edge": { "version_added": "14" }, "firefox": { "version_added": "48" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "14" }, "safari_ios": { "version_added": "15" } } } }, "css_origin": { "__compat": { "support": { "chrome": { "version_added": false }, "edge": "mirror", "firefox": { "version_added": "144" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "18" }, "safari_ios": "mirror" } } }, "exclude_globs": { "__compat": { "support": { "chrome": { "version_added": "≤72" }, "edge": { "version_added": "14" }, "firefox": { "version_added": "48" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": false, "impl_url": "https://webkit.org/b/246492" }, "safari_ios": "mirror" } } }, "exclude_matches": { "__compat": { "support": { "chrome": { "version_added": "≤72" }, "edge": { "version_added": "14" }, "firefox": { "version_added": "48" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "14" }, "safari_ios": { "version_added": "15" } } } }, "include_globs": { "__compat": { "support": { "chrome": { "version_added": "≤72" }, "edge": { "version_added": "14" }, "firefox": { "version_added": "48" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": false, "impl_url": "https://webkit.org/b/246492" }, "safari_ios": "mirror" } } }, "js": { "__compat": { "support": { "chrome": { "version_added": "≤72" }, "edge": { "version_added": "14" }, "firefox": { "version_added": "48" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "14" }, "safari_ios": { "version_added": "15" } } } }, "match_about_blank": { "__compat": { "support": { "chrome": { "version_added": "≤58" }, "edge": { "version_added": "14" }, "firefox": { "version_added": "52", "notes": "Content scripts won't be injected into empty iframes at 'document_start' even if you specify that value in 'run_at'." }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "18.4" }, "safari_ios": "mirror" } } }, "match_origin_as_fallback": { "__compat": { "support": { "chrome": { "version_added": "99" }, "edge": "mirror", "firefox": { "version_added": "128" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "18.4" }, "safari_ios": "mirror" } } }, "matches": { "__compat": { "support": { "chrome": { "version_added": "≤72" }, "edge": { "version_added": "14" }, "firefox": { "version_added": "48" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "14" }, "safari_ios": { "version_added": "15" } } } }, "run_at": { "__compat": { "support": { "chrome": { "version_added": "≤72" }, "edge": { "version_added": "14" }, "firefox": { "version_added": "48" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "14", "notes": "Content scripts are not applied to tabs until the user grants permission via the extension's access popover in the toolbar. Additional loads after permission is granted will respect `run_at`." }, "safari_ios": { "version_added": "15", "notes": "Content scripts are not applied to tabs until the user grants permission via the extension's access alert. Additional loads after permission is granted will respect `run_at`." } } } }, "world": { "__compat": { "support": { "chrome": { "version_added": "111" }, "edge": "mirror", "firefox": { "version_added": "128" }, "firefox_android": "mirror", "opera": "mirror", "safari": { "version_added": "18" }, "safari_ios": "mirror" } } } } } } }