computer-playbook/roles/srv-web-7-7-inj-port-ui-desktop
Kevin Veen-Birkenbach a40d48bb03
Refactor srv-web-7-7-inj-port-ui-desktop to use CDN-served JS file with inline initializer
- Added vars/main.yml to define iframe-handler.js file name and destination
- Implemented 01_deploy.yml to deploy iframe-handler.js to CDN and set mtime-based version fact
- Split original iframe logic into:
  • iframe-handler.js (full logic, served from CDN)
  • iframe-init_one_liner.js.j2 (small inline bootstrap, CSP-hashed)
- Updated head_sub.j2 to load script from CDN instead of embedding full code
- Added body_sub.j2 for inline init code
- Updated iframe-handler.js.j2 with initIframeHandler() function and global exposure
- Activated role earlier in inj-compose with public: true so vars are available for templates
- Included 'port-ui-desktop' in body_snippets loop in location.lua.j2
- Disabled 'port-ui-desktop' feature in web-svc-cdn config by default

https://chatgpt.com/share/689d03a8-4c28-800f-8b06-58ce2807b075
2025-08-13 23:29:32 +02:00
..
2025-08-13 00:33:47 +02:00

🌐 iFrame Notifier for Nginx

This Ansible role injects a small JavaScript snippet into your HTML responses that enables parent pages to get notified whenever the iframes location changes and forces external links to open in a new tab.


Features

  • Location Change Notification
    Uses postMessage to inform the parent window of any URL changes inside the iframe (including pushState/popState events) for seamless SPA support.

  • External Link Handling
    Automatically sets target="_blank" and rel="noopener" on links pointing outside your primary domain to improve security and user experience.

  • Easy CSP Integration
    Calculates a CSP hash for the injected script so you can safely allow it via your Content Security Policy.


Author

Developed by Kevin Veen-Birkenbach https://www.veen.world 🎉