2013-05-25 16 views
8

Ho un piccolo bit di javascript destinato ad aprire due o più schede. Funziona bene in FF e IE, ma Chrome apre il secondo in una nuova finestra anziché in una scheda. Non dipende dall'URL come ho provato con due URL identici. Prima si apre in una scheda, la seconda in una nuova finestra.comportamento window.open in chrome tabs/windows

Ecco il mio frammento di codice:

for(var i=0 ; i<sites.length ;i++) 
{ 
    window.open(sites[i].Url); 
} 
+0

Puoi essere più chiaro? Non capisco la tua domanda –

+0

@LightStyle Il suo codice apre nuove finestre invece di nuove schede in Chrome. – Juampi

+0

Solo così è più facile capire qui una pagina di test: http://www.bosmaadvies.com/chrometest.html – user1151653

risposta

11

Chrome si apre automaticamente un URL in una nuova scheda solo se si tratta di user generated azione, limitata ad una linguetta per ogni azione dell'utente. In ogni altro caso, l'URL verrà aperto in una nuova finestra (che, a titolo di esempio, è bloccata per impostazione predefinita su Chrome).
window.open deve essere chiamato all'interno di un callback attivato da un'azione dell'utente (ad esempio onclick) per l'apertura della pagina in una nuova scheda anziché in una finestra.

Nell'esempio, si tenta di aprire N schede su azione dell'utente. Ma solo il primo viene aperto in una nuova scheda (perché è un'azione generata dall'utente). In seguito, qualsiasi altro URL verrà aperto in una nuova finestra.

domanda simile: force window.open() to create new tab in chrome (vedi risposta da maclema)

+1

Grazie, temevo che sarebbe stato qualcosa del genere . L'ho segnalato a Google come un bug perché ritengo che una funzione dovrebbe comportarsi in modo coerente e non modificare il comportamento la seconda volta che viene chiamata. Oltre a ciò, altri browser aprono semplicemente le schede. – user1151653

+1

Credo che sia di progettazione, dal momento che le nuove finestre hanno un meccanismo a blocchi e le nuove schede no. È la stessa storia degli avvisi. Se si dispone di più avvisi consecutivi (nello stesso ambito/contesto), il primo verrà visualizzato normalmente e tutti i seguenti avvisi avranno una casella di controllo "impedisce ulteriori dialoghi". –

+1

Capisco le considerazioni, ma francamente penso che sia un progetto stupido se porta a comportamenti inaspettati. Mi piace sapere che cosa fa una chiamata a una funzione, e se una chiamata a window.open porta a risultati completamente diversi da un'altra chiamata, il design è in errore. Oltre a ciò, sia FF che IE hanno blocchi popup e implementano correttamente questo. – user1151653

0

mi sono imbattuto in questa domanda What is the (function() { })() construct in JavaScript? che dà spiegazione IIFE. Penso che questo possa essere usato finita. Per favore, sopportami. Non ho una profonda conoscenza di javascript. Ma ho provato come sotto e il suo funzionamento.

var sites = [{"url" : "http://www.google.com"} , {"url" : "http://www.yahoo.com"} , {"url" : "http://www.msn.com"}]; 
console.log(sites); 
for(var i=0 ; i < sites.length ;i++) { 
    (function(i) { 
     console.log(i); 
     window.open(sites[i].url , "_blank"); 
    })(i); 
} 

Apre l'URL in nuove schede in cromo.