Innanzitutto, so che ci sono molte domande su questo fenomeno ma nessuno dei rimedi proposti fino ad ora potrebbe aiutare nella situazione che ho qui.Come impedire che le azioni iFrame provochino lo scorrimento della pagina esterna
Ambiente: mio codice è in Outer iFrame all'interno di una pagina non mi controllo. È dimensionato per adattarsi a tutti i miei contenuti in modo che non avvenga lo scorrimento all'interno del mio iFrame. Piuttosto, la pagina esterna può scorrere su e giù per visualizzare il suo contenuto.
Problema: Ho un iFrame interno contenente annunci di terze parti che non posso controllare. Se l'iFrame interno corre una delle seguenti Javascript comandi, la pagina esterna scorre tutto giù per portare l'iFrame interna in vista:
- sfocatura e concentrarsi su un elemento interno
window.location.href o document.location.hash a un'ancora al suo interno.
scrollIntoView su un elemento interno
Here is a demo a colleague put together (attendere 5 secondi per poter iniziare)
Soluzioni che non funzionano:
- Se ho controllato la pagina esterna, potrei ascoltare l'evento onScroll e impedire alla pagina di scorrere se non fosse da una rotellina del mouse o da un tasto su/giù. Tuttavia, a causa di motivi di sicurezza, il mio iFrame esterno non può accedere alla pagina principale o impedire alla pagina principale di scorrere verso l'alto o verso il basso.
- Potrei sovrascrivere tutti quei metodi Javascript menzionati sopra in modo che non funzionassero, tuttavia gli annunci nel mio iFrame interno creano effettivamente i propri iFrame interni che hanno quella funzionalità e causano lo stesso problema.
- Non ci sono eventi propagati che posso vedere quale il mio iFrame potrebbe smettere di raggiungere la pagina principale. Il browser sembra ascoltare direttamente l'iFrame più interno.
Puoi provare a sandboxing l'iframe bambino? Mi rendo conto che probabilmente non è una soluzione, dal momento che gli annunci probabilmente hanno bisogno di eseguire script, ma forse vale la pena sperimentarli? Forse aggiungere un attributo sandbox dopo aver caricato il contenuto iframe? –
Sì, l'ho provato e l'unica impostazione sandbox che sembra funzionare disabilita totalmente javascript che non è un'opzione dal momento che gli annunci devono eseguire script –