2015-11-03 27 views
17

Da Chrome 46 è necessario aggiungere il flag 'allow-modals' all'attributo sandbox di un iframe per consentire alle modali (come alert e confirm) di uscire dall'iframe. Nessun problema finora.Come gestire il flag sandbox 'allow-modals' per iframe nei browser che non lo supportano ancora?

Ma quando si esegue il codice nei browser che non supportano ancora la bandiera (come Safari o Chrome prima della versione 46) si ottiene il seguente errore: Errore durante l'analisi del attributo 'sandbox': 'allow-modali' è un flag sandbox non valido.

Qualcuno ha un'idea su come risolvere il problema senza alcun tipo di sniffing del browser?

risposta

1

Sembra che l'unico modo per aggiungerlo sia retroattivo, tramite JS.

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>

sembra terribilmente strano che un nuovo valore di attributo non può essere utilizzato nei browser più vecchi. Le modifiche non compatibili con le versioni precedenti non sono il modo in cui il web dovrebbe funzionare. :/

+0

Grazie per la risposta! –