This guide explains how to adapt the AWS Pricing Helper extension for different browsers.
The core extension logic (config.js, content.js, styles.css) is browser-agnostic and works across all browsers. The main differences are in the manifest files and distribution methods.
| Browser | Manifest Version | Manifest File | Distribution | Notes |
|---|---|---|---|---|
| Chrome | V3 | manifest.json |
Chrome Web Store | Reference implementation |
| Brave | V3 | manifest.json |
Chrome Web Store | Same as Chrome |
| Edge | V3 | manifest.json |
Microsoft Store | Same as Chrome |
| Firefox | V2 | manifest-firefox.json |
Firefox Add-ons | Different manifest format |
| Safari | V3 | manifest-safari.json |
App Store | Requires Apple Developer account |
{
"manifest_version": 3,
"permissions": ["activeTab", "storage"],
"host_permissions": ["https://*.console.aws.amazon.com/*"],
"action": { "default_popup": "popup.html" }
}{
"manifest_version": 2,
"permissions": ["activeTab", "storage", "https://*.console.aws.amazon.com/*"],
"browser_action": { "default_popup": "popup.html" }
}- Chrome/Brave/Edge/Safari: Separate
permissionsandhost_permissions - Firefox: All permissions in single
permissionsarray
- Chrome/Brave/Edge/Safari: Uses
"action" - Firefox: Uses
"browser_action"
-
Rename manifest file:
cp manifest.json manifest-chrome.json cp manifest-firefox.json manifest.json
-
Test in Firefox:
- Open Firefox
- Go to
about:debugging - Click "This Firefox"
- Click "Load Temporary Add-on"
- Select your
manifest.json
-
Package for distribution:
zip -r aws-pricing-helper-firefox.zip . -x "manifest-chrome.json" "manifest-safari.json"
-
Use Safari manifest:
cp manifest-safari.json manifest.json
-
Requirements:
- Apple Developer account ($99/year)
- Xcode for development
- Safari App Extensions framework
-
Development process:
- Create Safari App Extension in Xcode
- Import your extension files
- Test in Safari
- Submit to App Store
- Use Chrome manifest (no changes needed)
- Install from Chrome Web Store or load unpacked extension
- Brave automatically supports Chrome extensions
The extension uses standard web APIs that work across all browsers:
✅ DOM APIs: document.querySelector, addEventListener, etc.
✅ ES6+ Features: Arrow functions, const/let, template literals
✅ Web APIs: MutationObserver, setTimeout, etc.
The styles use standard CSS that works in all browsers:
✅ Flexbox: Modern layout system
✅ CSS Variables: Custom properties
✅ Transitions: Smooth animations
✅ Positioning: Fixed positioning for overlay
// Add to your test suite
describe('Browser Compatibility', () => {
test('should work in Chrome', () => {
// Test Chrome-specific features
});
test('should work in Firefox', () => {
// Test Firefox-specific features
});
test('should work in Safari', () => {
// Test Safari-specific features
});
});- Extension loads without errors
- Pricing messages display correctly
- Click events work properly
- Auto-hide functionality works
- URL change detection works
- Popup opens correctly
- Icons display properly
- Submit
manifest.json(V3) - Pay one-time $5 registration fee
- Review process takes 1-3 days
- Submit
manifest-firefox.json(V2) - Free registration
- Review process takes 1-2 weeks
- Requires Apple Developer account
- Must be distributed as macOS app
- Review process takes 1-2 weeks
- Users can load unpacked extensions
- Works in Chrome, Brave, Edge
- Not supported in Firefox/Safari
-
Firefox: "manifest_version" error
- Solution: Use Manifest V2 format
-
Safari: Extension not loading
- Solution: Check Apple Developer account and certificates
-
Brave: Extension blocked
- Solution: Enable "Allow extensions from other stores" in settings
-
Cross-browser CSS differences
- Solution: Use CSS prefixes or autoprefixer
- Check browser console for JavaScript errors
- Verify manifest syntax with browser's extension validator
- Test permissions by checking if content scripts load
- Use browser dev tools to inspect extension elements
Firefox is planning to support Manifest V3. When available:
- Update Firefox manifest to V3
- Use same format as Chrome
- Remove V2-specific code
Consider using the Web Extensions API for better cross-browser compatibility:
// Instead of browser-specific APIs
if (typeof browser !== 'undefined') {
// Firefox
browser.runtime.sendMessage(data);
} else {
// Chrome/Brave/Edge/Safari
chrome.runtime.sendMessage(data);
}The extension is well-designed for cross-browser compatibility. The main work involves:
- Creating browser-specific manifest files
- Testing in each browser
- Following browser-specific distribution processes
The core functionality will work identically across all supported browsers!