Ci siamo imbattuti in questo stesso problema e abbiamo dato la caccia a SO per una risposta. Quello che abbiamo trovato funziona nelle nostre circostanze e la saggezza distillata è la seguente:
Il problema è legato ai blocchi di blocco del browser che impediscono l'apertura della finestra programmatica. I browser consentono di aprire le finestre dai clic effettivi dell'utente che si verificano sul thread principale. Allo stesso modo, se chiami window.open sul thread principale funzionerà, come indicato sopra. In base a questa risposta su Open a URL in a new tab (and not a new window) using JavaScript se si sta utilizzando una chiamata Ajax e si desidera aprire la finestra in caso di successo è necessario impostare async: false
che funzioni perché ciò manterrà tutto sul thread principale.
Non siamo riusciti a controllare la nostra chiamata Ajax in quel modo, ma abbiamo trovato un'altra soluzione che funziona per gli stessi motivi. Attenzione, è un po 'hacky e potrebbe non essere appropriato per te dato i tuoi limiti. Per gentile concessione di un commento su una risposta diversa su Open a URL in a new tab (and not a new window) using JavaScript, aprire la finestra prima di chiamare setTimeout
e quindi aggiornarlo nella funzione ritardata. Ci sono un paio di modi per farlo. Mantenere un riferimento alla finestra quando lo si apre, w = window.open...
e impostare w.location
o aprire con una destinazione, window.open('', 'target_name')
, nella funzione ritardata aperta in tale destinazione, window.open('your-url', 'target_name')
, e fare affidamento sul browser mantenendo il riferimento.
Ovviamente, se l'utente ha le proprie impostazioni per aprire i collegamenti in una nuova finestra questo non lo cambierà, ma non è stato un problema per l'OP.
In che browser si verifica questo comportamento? – shanet
Speriamo che questo sia il tuo _ [risposta] (http://stackoverflow.com/questions/2601761/change-browser-settings-by-script) _. –
tutti i browser. pagina di prova
– user2819018