Öffnen Sie programmgesteuert neue Seiten auf Registerkarten


98

Ich versuche, Safari oder IE7 zu zwingen, eine neue Seite über eine neue Registerkarte zu öffnen .

Programmatisch meine ich so etwas wie:

window.open('page.html','newtaborsomething');

1
Ich bin mir nicht sicher, ob ich den Punkt verstehe. Entwickeln Sie eine App, die mit dem Internet Explorer funktioniert, und möchten Sie jede neue Seite auf einer neuen Registerkarte öffnen? Oder möchten Sie einfach den IE so einrichten, dass beim Klicken auf einen Link ein neuer Tab geöffnet wird? Oder erstellen Sie eine Website mit mehr Links und möchten, dass diese separat geöffnet werden? Bitte machen Sie es klarer.
Dungeo

Dank all Ihrer Kommentare und Antworten weiß ich, dass dies keine große Sache ist und kein Problem in meiner Entwicklung sein sollte, aber dies ist eine Kundenanfrage, keine wichtige, die ich nur wissen wollte. Das Problem ist, dass IE7 und Safari kein Popup mit einer Registerkarte mit Javascript oder Zielattribut öffnen, stimmt das?
Ricardo Vega

Antworten:


63

Sie können dies nicht direkt steuern, da dies eine Option ist, die von Internet Explorer-Benutzern gesteuert wird.

Das Öffnen von Seiten mit Window.open mit einem anderen Fensternamen wird in einem neuen Browserfenster wie einem Popup geöffnet ODER in einem neuen Tab geöffnet, wenn der Benutzer den Browser dafür konfiguriert hat.


Welche Kriterien verwendet Internet Explorer, um diese Entscheidung zu treffen, wenn die Option "Internet Explorer entscheiden lassen, wie Popups geöffnet werden" ausgewählt ist?
Dead.Rabit

113

Sie können in Firefox das Attribut target = "_ newtab" zum Anker hinzufügen, um das Öffnen einer neuen Registerkarte zu erzwingen.

<a href="some url" target="_newtab">content of the anchor</a>

In Javascript können Sie verwenden

window.open('page.html','_newtab');

Das gesagt, ich stimme Sam teilweise zu. Sie sollten den Benutzer nicht zwingen, neue Seiten oder neue Registerkarten zu öffnen, ohne ihm einen Hinweis darauf zu geben, was passieren wird, bevor er auf den Link klickt.

Lassen Sie mich wissen, ob es auch in einem anderen Browser funktioniert (ich habe derzeit keine Möglichkeit, es in einem anderen Browser als Firefox zu testen).

Bearbeiten: Referenz für ie7 hinzugefügt Vielleicht kann dieser Link nützlich sein
http://social.msdn.microsoft.com/forums/en-US/ieextensiondevelopment/thread/951b04e4-db0d-4789-ac51-82599dc60405/


6
Vielen Dank für diesen Firefox-Tipp. Jetzt habe ich mein TargetKiller-Addon aktualisiert, um "_newtab" und "newtab" zu entfernen. : P
thenonhacker

1
Ich schätze Ihre Antwort sehr, aber ich weiß, dass Firefox dies tun wird (einige Texte, die nicht von mir getestet wurden, bemerken, dass dies nicht immer der Fall ist, es besteht eine 50: 50-Chance, ein neues Fenster oder einen neuen Tab zu erhalten). Ich denke auch, dass dies kein Problem sein sollte, aber Sie kennen Kunden :)
Ricardo Vega

2
Dies ist möglicherweise nicht auf allen Builds / Plattformen der Fall, aber in Firefox 3.5 unter Linux können Sie dies nicht mehr als einmal tun. Wenn Ihre Seite mehrere target = "_ newtab" -Links enthält, klicken Sie auf einen dieser Links füllt nur eine einzelne neue Registerkarte ... das heißt, nachfolgende Klicks überschreiben alles, was zuvor in dieser Registerkarte geöffnet wurde. Ich denke, dies öffnet tatsächlich einen Tab mit dem Namen "_newtab", anstatt eine browserspezifische Problemumgehung zu sein.
Rylee Corradini

55
Ich bin mir ziemlich sicher, dass "_newtab" bedeutungslos ist, es sei denn, jemand hat gegenteilige Unterlagen. Sie öffnen lediglich ein Fenster mit dem Namen _newtab (weshalb alle nachfolgenden Links mit diesem Ziel im selben Fenster geöffnet werden). Sie können auf "foo" oder "bar" zielen und das gleiche Verhalten sehen. Die einzigen bekannten Ziele sind _blank, _self, _parent und _top. htmlcodetutorial.com/linking/_A_TARGET.html
Tom Lianza

43

Diejenigen von Ihnen, die versuchen, Folgendes zu verwenden:

window.open('page.html', '_newtab');

sollte sich wirklich die window.open-Methode ansehen.

Sie weisen den Browser lediglich an, ein neues Fenster mit dem Namen "_newtab" zu öffnen und page.html darin zu laden. Jede neue Seite, die Sie laden, wird in dieses Fenster geladen. Wenn ein Benutzer seinen Browser so eingestellt hat, dass neue Seiten in neuen Registerkarten anstelle neuer Fenster geöffnet werden, wird eine Registerkarte geöffnet. Unabhängig davon wird für das Fenster oder die Registerkarte derselbe Name verwendet.

Wenn Sie möchten, dass verschiedene Seiten in verschiedenen Fenstern oder Registerkarten geöffnet werden, müssen Sie den NAMEN des neuen Fensters / der neuen Registerkarte in einen anderen Namen ändern, z.

window.open('page2.html', '_newtab2');

Natürlich kann der Name für das neue Fenster / die neue Registerkarte ein beliebiger Name wie Seite1, Seite2, Seite3 usw. anstelle von _newtab2 sein.


3
kennt sich aus. '_newtab' ist kein reservierter Name. '_blank' ist eine besondere Sache, die ein weiteres nicht spezifiziertes und unbenanntes Fenster / Tab öffnet - dieses, das Sie immer wieder verwenden können. '_newtab' ist nichts Besonderes, außer dass es sich um den spezifischen Namen handelt, den Sie einem neuen Tab (Standard) oder Fenster gegeben haben, den Ihr Browser ständig mit der URL aktualisiert, die Sie an ihn senden.
BradChesney79

14

Es ist Sache des Benutzers, ob er neue Registerkarten oder neue Fenster verwenden möchte. Es ist nicht Sache des Entwicklers, dieses Verhalten zu ändern. Ich glaube nicht, dass du es schaffen kannst.

Pet Peeve von mir - ich hasse es, wenn Websites mich zwingen, in einem neuen Fenster / Tab zu öffnen - ich bin durchaus in der Lage, diese Entscheidung für mich selbst zu treffen. Besonders wenn sie es in Javascript machen - das ist wirklich nicht hilfreich.


1
+1 bis Sam - Neue Seiten, die in Registerkarten oder Fenstern geöffnet werden, sind eine browser- (und benutzerspezifische) Option. Im Allgemeinen hasse ich es, wenn eine Site ein neues Fenster öffnet.
Richard Ev

Darüber hinaus: In der "strengen" Definition gibt es kein gültiges Attribut "Ziel", da der Benutzer nicht gestört wird. Versuchen Sie es: validator.w3.org
Guerda

4
Ich mag es, Stapel von Registerkarten zu Hause zu öffnen, also bin ich in diesem Fall der Benutzer. Nur eine Erinnerung daran, dass es Ausnahmen gibt.
Mark Essel

7
Ich bin damit einverstanden, dass es ärgerlich sein kann, wenn Websites Aktionen erzwingen, aber ich denke, es ist ein wenig nicht hilfreich, einfach zu sagen, dass Sie etwas nicht tun sollten, ohne die Gründe zu berücksichtigen, warum jemand es tun möchte. Es ist üblich, dass Websites Dinge in neuen Registerkarten öffnen, insbesondere in externen Website-Links, oder wenn es nicht hilfreich ist, eine aktive Seite durch neuen Inhalt zu ersetzen, sodass dies kein völlig unerwartetes Verhalten ist. Ich würde auch vorschlagen, dass dies keine wirkliche Antwort auf die Frage ist und besser als Kommentar zum ursprünglichen Beitrag geeignet gewesen wäre.
Andyface

1
Ich bin nicht einverstanden, vorausgesetzt, ein Standard für den Benutzer ist eine Designauswahl pro Webanwendung und nicht pro Browser. Der Browser kann einen Standard abonnieren, bei dem die Anwendung dies nicht tut. Wenn Browser dem Benutzer eine Möglichkeit bieten, Anwendungsstandards / Browser-Standardeinstellungen zu überschreiben, ist dies das Beste aus beiden Welten. Benutzer> Anwendung> Browser.
Derek Litz

8

Hast du schon mal versucht wie

var open_link = window.open('','_blank');
open_link.location="somepage.html";

Ist dieser Cross-Browser kompatibel? Scheint in IE8 zu funktionieren, besorgt über zukünftige Versionen oder andere Browser.
n00b

Ja .. es ist kompatibel für Cross-Browser. Ich habe bis jetzt kein Problem damit: D
Thurein Soe

5

Ich habe es in Chrome herausgefunden.

window.open('page.html','_newtab')

wird nur einmal funktionieren.

Sie können verwenden:

window.open(ct.getNewHref(),'_newtab' + Math.floor(Math.random()*999999));

So öffnen Sie mehrere neue Registerkarten.


10
Das liegt daran, dass in Chrome _newtab nur ein Name ist und Sie ihn auffordern, die Seite auf der Registerkarte "_newtab" zu öffnen
w00t

3

Der Code, den ich mit jQuery verwende:

$("a.btn_external").click(function() {
    url_to_open = $(this).attr("href");
    window.open(url_to_open, '_blank');
    return false;
});

Dies ist nützlich, um zwischen den Klickereignissen eines Elternteils in einem Kind zu unterscheiden. Mit dieser Methode lösen Sie das Klickereignis des übergeordneten Elements nicht aus.


8
Warum nicht einfach einfaches altes HTML verwenden? <a href="page.html" target="_blank">foo</a>
Pixelastic

1
@pixelastic "Mit dieser Methode lösen Sie das Klickereignis der Eltern nicht aus."
Michael Blackburn

3

Dies funktioniert zu 100%

window.open('http://www.google.com/','_newtab' + Date.now());


0

Wenn Sie möchten, können Sie diese Methode verwenden, die etwas hackig ist, aber die gewünschte Funktionalität bietet:

jQuery('<a/>', {
    id: 'foo',
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!',
    target:'_blank',
    style:'display:none;'
}).appendTo('#mySelector');

$('#foo').click()

Kannst du eine jsfiddle zur Verfügung stellen?
Xenology

-2

Dies kann funktionieren, wenn Sie eine Batch-Datei aufrufen können (ich verwende PHP mit XP SP2 und IE8 ... Sie können IE7 versuchen, keine Ahnung). Verwenden Sie Folgendes (oder ähnliches) in Ihrer .bat-Datei, um Windows zu öffnen: Starten Sie "" C: \ Progra ~ 1 \ Intern ~ 1 \ iexplore "http://www.site.com". Zwischen dem Anführungszeichen und C: \ Progr ... usw. ist kein Leerzeichen. Irgendwann werden möglicherweise neue Fenster (dh target = "_ blank") anstelle neuer Registerkarten geöffnet, dies funktioniert jedoch bis zu einem gewissen Punkt. nicht ausgiebig getestet. Um dies in einer regulären Batchdatei (CMD.exe) zu verwenden, muss wahrscheinlich bereits ein Fenster geöffnet sein. Ich habe nur etwas geteilt, über das ich gestolpert bin. Zur Verdeutlichung EDITIERT.


-7
<a href="http://www.google.com/" target="_self">New Tab Example</a>

Funktioniert in IE7.

Grüße,

Glenn


8
Glenn, das ist das Gegenteil von dem, was das OP verlangt hat. _self öffnet das Dokument im selben Fenster oder Frame.
Travega

Es ist auch nicht der Weg, programmatisch zu öffnen. Überraschung ist, dass es mit dieser Antwort +10 Wiederholungen (+ 3 / -10) gewinnt.
Vusan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.