Browsers typically don't allow a child tab/window to close its opener with script. And yet they do allow the child to alter the location of the opener tab/window.
Questo non è completamente accurato. Se leggi più attentamente il testo MDN citato, in realtà si riferisce all'apertura di parent
, non della relazione con popup
. La restrizione attuale che stai probabilmente incontrando è:
- Gli script possono solo chiudere le finestre originariamente aperte dallo script.
Quindi nel tuo esempio specifico, popup
è stato aperto da uno script, ma opener
è stato aperto da un utente e quindi opener
non può essere close
d da solo o popup
.
Immagina uno scenario in cui ci sono due popup
- Scheda aperta dall'utente (non può essere
close
d)
- Popup 1 (
opener
è una scheda aperta dall'utente)
- Popup 2 (
opener
è popup 1)
Popup 2 può close
popup 1 in questo scenario.
Tuttavia, il popup 1 non può close
della scheda aperta dall'utente perché viola la regola precedente.
-
In Chrome & Firefox, non importa se popup
s sono la stessa origine di opener
s. Il popup
può modificare location
o close
il opener
come desiderato, soggetto al mio primo punto sopra.
-
In IE11, il popup
può close
il parent
, ma non può cambiare parent.location
a meno che non soddisfi Stessa politica dell'origine . (si ottiene un nuovo popup se si tenta)
Inoltre, vorrei chiarire che qualsiasi opener
può close
il proprio popup
s o modificare il loro location
senza restrizioni. L'accesso ai contenuti popup
è ancora soggetto alla stessa politica di origine per motivi di sicurezza.
This leads to a curious workaround whereby you can create a page that does nothing but close itself with script as soon as its loaded, and then change the location of the parent tab/window to this new page, effectively closing it. ... does this workaround effectively create a back door?
Per rispondere direttamente alla tua domanda, non esiste una tale soluzione alternativa. L'esempio collegato produrrà l'errore:
Scripts may not close windows that were not opened by script.
A meno che tu non sia in una situazione a 2 popup come ho spiegato sopra, nel qual caso il popup
potrebbe solo close
il suo opener
direttamente. Tuttavia, la soluzione non sarebbe necessaria in questo caso.