2015-11-03 5 views
17

Seit Chrome 46 ist es erforderlich, das Attribut 'allow-modals' dem Sandbox-Attribut eines iframes hinzuzufügen, damit modals (wie alert und confirm) aus dem iframe ausbrechen können. Kein Problem bis jetzt.Wie behandelt man das Sandbox-Flag "allow-modals" für Iframes in Browsern, die es noch nicht unterstützen?

Aber wenn Sie diesen Code in Browsern, die noch nicht die Flagge unterstützen (wie Safari oder Chrome vor Version 46) können Sie die folgende Fehlermeldung erhalten: Fehler bei der ‚Sandbox‘ Attribut Parsen: ‚allow-modals‘ ist ein ungültiges Sandbox-Flag.

Jemand eine Idee, wie man das ohne irgendeine Art von Browser-Sniffing beheben kann?

Antwort

1

Scheint wie der einzige Weg, um es rückwirkend über JS hinzuzufügen.

function allowModals(){ 
 
    for (const i of document.getElementsByTagName('iframe')) { 
 
    if (!i.sandbox.supports('allow-modals')) { 
 
     console.warn("Your browser doesn't support the 'allow-modals' attribute :("); 
 
     break; 
 
    } 
 
    if (i.sandbox.contains('allow-modals')) continue; 
 
    console.info(i, "doesn't allow modals"); 
 
    i.sandbox.add('allow-modals'); 
 
    console.info(i, 'now allows modals'); 
 
    } 
 
}
<button onclick='allowModals()' style='display: block'>Allow modals</button> 
 
<iframe src="//example.com"></iframe>

Scheint furchtbar merkwürdig, dass ein neuer Attributwert kann nicht in älteren Browsern verwendet werden. Rückwärtskompatible Änderungen sind nicht die Art, wie das Web funktionieren sollte. :/

+0

Danke für die Antwort! –