diff --git a/src/app/plugins/plugin-cleanup.service.ts b/src/app/plugins/plugin-cleanup.service.ts index a7fcd01aad..d2133c1c02 100644 --- a/src/app/plugins/plugin-cleanup.service.ts +++ b/src/app/plugins/plugin-cleanup.service.ts @@ -1,5 +1,4 @@ import { Injectable } from '@angular/core'; -import { cleanupAllPluginIframeUrls } from './util/plugin-iframe.util'; /** * Simplified cleanup service following KISS principles. @@ -34,8 +33,5 @@ export class PluginCleanupService { cleanupAll(): void { // Just clear all references - let Angular manage iframe DOM lifecycle this._pluginIframes.clear(); - - // Clean up all blob URLs to prevent memory leaks - cleanupAllPluginIframeUrls(); } } diff --git a/src/app/plugins/ui/plugin-index/plugin-index.component.html b/src/app/plugins/ui/plugin-index/plugin-index.component.html index 190111d4df..5e59fa2ea9 100644 --- a/src/app/plugins/ui/plugin-index/plugin-index.component.html +++ b/src/app/plugins/ui/plugin-index/plugin-index.component.html @@ -59,16 +59,19 @@ } - @if (iframeSrc() && !error()) { + @if (iframeSrcdoc() && !error()) {
+ Angular forbids binding security-sensitive iframe attributes (throws NG0910). + No allow-same-origin: the iframe runs on an opaque origin so it cannot reach + window.parent.ea. Loaded via srcdoc (not a blob: URL) so it still renders on + packaged file:// builds, where an opaque-origin blob: fetch would be blocked. -->