2013-05-25 10 views
8

Ich habe ein kleines bisschen Javascript beabsichtigt, zwei oder mehr Registerkarten zu öffnen. Dies funktioniert in FF und IE, aber Chrome öffnet den zweiten in einem neuen Fenster statt Tab. Es ist nicht von der URL abhängig, da ich es mit zwei identischen URLs probiert habe. Zuerst wird auf der Registerkarte, der zweite in einem neuen Fenster geöffnet.window.open verhalten in chrome tabs/windows

Hier ist mein Code-Schnipsel:

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

Können Sie klarer sein? Ich verstehe deine Frage nicht –

+0

@LightStyle Sein Code öffnet neue Fenster statt neuer Tabs in Chrome. – Juampi

+0

Nur so ist es einfacher zu verstehen, hier ist eine Testseite: http://www.bosmaadvies.com/chromet.html – user1151653

Antwort

11

Chrome öffnet sich automatisch eine URL in einem neuen Tab nur wenn es Benutzeraktion erzeugt wird, zeitlich beschränkt auf ein Register pro Benutzeraktion. In jedem anderen Fall wird die URL in einem neuen Fenster geöffnet (das übrigens in Chrome standardmäßig blockiert ist).
window.open muss innerhalb eines Callbacks aufgerufen werden, der durch eine Benutzeraktion (z. B. onclick) ausgelöst wird, damit die Seite in einem neuen Register anstelle eines Fensters geöffnet wird.

In Ihrem Beispiel versuchen Sie, N Registerkarten nach Benutzeraktion zu öffnen. Aber nur der erste wird in einem neuen Tab geöffnet (weil es eine vom Benutzer generierte Aktion ist). Danach wird jede andere URL in einem neuen Fenster geöffnet.

ähnliche Frage: force window.open() to create new tab in chrome (siehe Antwort von maclema)

+1

Danke, ich hatte Angst, es wäre so etwas . Ich habe es als Fehler bei google gemeldet, da ich der Meinung bin, dass sich eine Funktion konsistent verhalten sollte und das Verhalten nicht beim zweiten Aufruf ändern sollte. Außerdem öffnen andere Browser einfach Tabs. – user1151653

+1

Ich glaube, es ist von Entwurf, da neue Fenster einen Blockmechanismus haben und neue Tabs nicht. Es ist die gleiche Geschichte wie mit Warnungen. Wenn Sie mehrere aufeinanderfolgende Alerts (im selben Scope/Kontext) haben, wird der erste normal angezeigt, und alle folgenden Alerts haben das Kontrollkästchen "weitere Dialoge verhindern". –

+1

Ich verstehe die Überlegungen, aber ehrlich gesagt denke ich, es ist ein albernes Design, wenn es zu unerwartetem Verhalten führt. Ich möchte wissen, was ein Aufruf einer Funktion tut, und wenn ein Aufruf von window.open zu völlig unterschiedlichen Ergebnissen von einem anderen Aufruf führt, dann ist das Design fehlerhaft. Außerdem haben sowohl FF als auch IE Popup-Blocker und implementieren dies korrekt. – user1151653

0

stieß ich auf dieser Frage What is the (function() { })() construct in JavaScript? die Erklärung auf IIFE gibt. Ich denke, das kann genutzt werden. Bitte tragen Sie mit mir Ich habe keine tiefen Kenntnisse über Javascript. Aber ich habe versucht wie unten und es funktioniert.

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); 
} 

Es öffnet die URL in neuen Tabs in Chrom.

Verwandte Themen