Switch Instagram embeds to iframe-only approach
Summary
Replace InstagramPlugin (which loads external embed.js script) with InstagramEmbedder that generates iframes directly, following the same pattern as YouTube, Vimeo, and 3speak.
Changes
- Add
InstagramEmbedderextendingAbstractEmbedder - Register in
AssetEmbedder - Remove
InstagramPluginfrom blog renderer plugins - Add test coverage
Benefits
| Aspect | Before (Plugin) | After (Embedder) |
|---|---|---|
| External scripts |
embed.js loaded |
None |
| CSP required | script-src + frame-src | frame-src only |
| Eager loading | Yes (issue #786 (closed)) | No |
| Consistency | Different from YouTube/Vimeo | Same pattern |
Embed Output
<div class="instagramWrapper">
<iframe src="https://www.instagram.com/p/POST_ID/embed/" ...></iframe>
</div>
Testing
- Unit tests added for InstagramEmbedder
- Manual testing recommended with posts containing Instagram links
Relates to #786 (closed)