Programowo otwieraj nowe strony na kartach

98

Próbuję „zmusić” przeglądarkę Safari lub IE7 do otwarcia nowej strony przy użyciu nowej karty .

Programowo mam na myśli coś takiego:

window.open('page.html','newtaborsomething');
Ricardo Vega
źródło
1
Nie jestem pewien, czy rozumiem - tworzysz aplikację, która współpracuje z IE i chcesz otwierać każdą nową stronę w nowej karcie? A może po prostu chcesz skonfigurować IE tak, aby otwierał nową kartę po kliknięciu łącza? Czy tworzysz witrynę z większą liczbą linków i chcesz, aby otwierały się osobno? Pls sprawiają, że jest to wyraźniejsze.
Dungeo
Dzięki wszystkim komentarzom i odpowiedziom, wiem, że to nie jest wielka sprawa i nie powinno to stanowić problemu w moim rozwoju, ale jest to prośba klienta, a nie ważna, po prostu chciałem wiedzieć. Problem polega na tym, że IE7 i Safari nie otwierają wyskakującego okienka z kartą używającą javascript lub atrybutu docelowego, prawda?
Ricardo Vega

Odpowiedzi:

63

Nie możesz tego bezpośrednio kontrolować, ponieważ jest to opcja kontrolowana przez użytkowników Internet Explorera.

Otwieranie stron za pomocą Window.open z inną nazwą okna otworzy się w nowym oknie przeglądarki, takim jak wyskakujące okienko, LUB otworzy się w nowej karcie, jeśli użytkownik tak skonfigurował przeglądarkę.

wtedyonhacker
źródło
Po zaznaczeniu opcji „Pozwól przeglądarce Internet Explorer decydować, w jaki sposób otwierają się wyskakujące okienka”, jakich kryteriów używa program Internet Explorer do podjęcia tej decyzji?
Dead.Rabit
113

Możesz, w Firefoksie to działa, dodać atrybut target = "_ newtab" do zakotwiczenia, aby wymusić otwarcie nowej karty.

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

W javascript możesz użyć

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

Powiedziałem to, częściowo zgadzam się z Samem. Nie należy zmuszać użytkownika do otwierania nowych stron lub nowej karty bez pokazania mu wskazówki, co się stanie, zanim kliknie łącze.

Daj mi znać, czy działa również w innej przeglądarce (nie mam w tej chwili możliwości wypróbowania tego w innej przeglądarce niż Firefox).

Edycja: dodano odniesienie do ie7 Może ten link może być przydatny
http://social.msdn.microsoft.com/forums/en-US/ieextensiondevelopment/thread/951b04e4-db0d-4789-ac51-82599dc60405/

Eineki
źródło
6
Dzięki za tę wskazówkę dla Firefoksa, zaktualizowałem mój dodatek TargetKiller, aby usunąć „_newtab” i „newtab”. : P
thenonhacker
1
Naprawdę doceniam twoją odpowiedź, ale wiem, że Firefox to zrobi (niektóre teksty, nie testowane przeze mnie, zauważ, że nie zawsze jest to prawdą, jest 50-50 szans na uzyskanie nowego okna lub karty). Też myślę, że to nie powinno być problemem, ale znacie klientów :)
Ricardo Vega.
2
Może się tak nie zdarzyć w przypadku wszystkich kompilacji / platform, ale Firefox 3.5 w systemie Linux nie pozwala na zrobienie tego więcej niż jeden raz ... jeśli masz na swojej stronie wiele linków target = "_ newtab", kliknięcie dowolnego z nich zapełni tylko jedną nową kartę ... to znaczy kolejne kliknięcia nadpiszą wszystko, co zostało otwarte wcześniej na tej karcie. Wydaje mi się, że to faktycznie otwarcie karty o nazwie „_newtab”, a nie obejście specyficzne dla przeglądarki.
Rylee Corradini,
55
Jestem prawie pewien, że "_newtab" jest bez znaczenia, chyba że ktoś ma dokumentację, która mówi inaczej. Wszystko, co robisz, to otwieranie okna o nazwie _newtab (dlatego wszystkie kolejne linki z tym celem otwierają się w tym samym oknie). Możesz kierować na „foo” lub „bar” i zobaczyć to samo zachowanie. Jedynymi dobrze znanymi celami są _blank, _self, _parent i _top. htmlcodetutorial.com/linking/_A_TARGET.html
Tom Lianza,
43

Ci z was, którzy próbują wykorzystać następujące elementy:

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

powinien naprawdę spojrzeć na metodę window.open.

Wszystko, co robisz, to mówienie przeglądarce, aby otworzyła nowe okno O NAZWIE „_newtab” i załadowała do niego page.html. Każda nowa strona, którą załadujesz, zostanie załadowana do tego okna. Jeśli jednak użytkownik ma ustawioną przeglądarkę, aby otwierać nowe strony w nowych kartach zamiast w nowych oknach, otworzy kartę. Niezależnie od tego używa tej samej nazwy dla okna lub karty.

Jeśli chcesz, aby różne strony otwierały się w różnych oknach lub kartach, musisz zmienić NAZWĘ nowego okna / karty na inną, na przykład:

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

Oczywiście nazwa nowego okna / karty może być dowolną nazwą, taką jak strona1, strona2, strona3 itd. Zamiast _newtab2.

Bob Lindabury
źródło
3
zna się na rzeczy. „_newtab” nie jest nazwą zastrzeżoną. „_blank” to wyjątkowa rzecz, która otwiera kolejne nieokreślone i nienazwane okno / kartę - to okno, którego możesz używać w kółko. „_newtab” nie jest czymś specjalnym, z wyjątkiem tego, że jest to określona nazwa, którą nadałeś nowej karcie (domyślnej) lub oknie, które Twoja przeglądarka odświeża za pomocą dowolnego adresu URL, który do niej wysyłasz.
BradChesney79
14

To od użytkownika zależy, czy chce używać nowych kart, czy nowych okien, modyfikowanie tego zachowania nie jest zadaniem programisty. Myślę, że nie możesz tego zrobić.

Moje wkurzenie - nienawidzę, gdy strony zmuszają mnie do otwierania w nowym oknie / karcie - jestem w stanie samodzielnie podjąć taką decyzję. Zwłaszcza gdy robią to w javascript - to naprawdę nie jest pomocne.

Sam Meldrum
źródło
1
+1 dla Sama - nowe strony otwierane w kartach lub oknach są wyborem zależnym od przeglądarki (i użytkownika). Generalnie nienawidzę, gdy jakakolwiek witryna otwiera się w nowym oknie.
Richard Ev
Oprócz tego: w „ścisłej” definicji nie ma prawidłowego atrybutu „cel”, ponieważ nie jest to denerwujące dla użytkownika. Wypróbuj: validator.w3.org
guerda
4
Lubię otwierać partie zakładek w domu, więc w takim przypadku jestem użytkownikiem. Tylko przypomnienie, że są wyjątki.
Mark Essel,
7
Chociaż zgadzam się, że wymuszanie działań przez witryny może być irytujące, myślę, że proste stwierdzenie, że nie należy czegoś robić, może być trochę nieprzydatne bez rozważenia powodów, dla których ktoś może chcieć to zrobić. Witryny często otwierają elementy w nowych kartach, szczególnie w linkach do witryn zewnętrznych, lub gdy zastępowanie aktywnej strony nową treścią nie jest pomocne, więc nie jest to całkowicie nieoczekiwane zachowanie. Sugerowałbym również, że tak naprawdę nie jest to odpowiedź na pytanie i lepiej pasowałoby jako komentarz do oryginalnego postu.
andyface
1
Nie zgadzam się, zakładając, że domyślnym wyborem dla użytkownika jest wybór projektu dla aplikacji internetowej, a nie dla przeglądarki. Przeglądarka może zasubskrybować domyślne, jeśli aplikacja nie. Ponadto, jeśli przeglądarki zapewniają użytkownikowi możliwość zastąpienia ustawień domyślnych aplikacji / ustawień domyślnych przeglądarki, to jest to najlepsze z obu światów. Użytkownik> Aplikacja> Przeglądarka.
Derek Litz
8

Czy już próbowałeś

var open_link = window.open('','_blank');
open_link.location="somepage.html";
Thurein Soe
źródło
Czy to jest kompatybilne z różnymi przeglądarkami? Wydaje się, że działa w IE8, martwię się o przyszłe wersje lub inne przeglądarki.
n00b
Tak ... jest kompatybilny z różnymi przeglądarkami. Do tej pory nie miałem z tym problemu: D
Thurein Soe
5

Dowiedziałem się w Chrome,

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

zadziała tylko raz.

Możesz użyć:

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

Aby otworzyć wiele nowych kart.

Derek 朕 會 功夫
źródło
10
to dlatego, że w Chrome _newtab to tylko nazwa i prosisz o otwarcie strony na karcie o nazwie „_newtab”
w00t
3

Kod, którego używam z jQuery:

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

Jest to przydatne do rozróżnienia między zdarzeniami kliknięcia rodzica u dziecka. Używając tej metody, nie wyzwalasz zdarzenia kliknięcia rodzica.

lacroixca
źródło
8
Dlaczego po prostu nie użyć zwykłego starego HTML? <a href="page.html" target="_blank">foo</a>
pixelastic
1
@pixelastic "Używając tej metody, nie wyzwalasz zdarzenia kliknięcia rodzica."
Michael Blackburn
3

To działa w 100%

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

Kevin Muchwat
źródło
0

Jeśli chcesz, możesz użyć tej metody, która jest nieco hackerska, ale oferuje pożądaną funkcjonalność:

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()
Ksenologia
źródło
czy możesz zapewnić jsfiddle?
Xenology,
-2

Może to zadziałać, jeśli możesz wywołać plik wsadowy (używam php z XP sp2 i IE8 ... możesz spróbować IE7, nie wiem). Aby otworzyć system Windows, użyj następującego (lub podobnego) pliku .bat: Uruchom "" C: \ Progra ~ 1 \ Intern ~ 1 \ iexplore "http://www.site.com". Nie ma spacji między cudzysłowem a C: \ Progr ... itd. W pewnym momencie może to spowodować otwarcie nowych okien (tj. Target = "_ blank") zamiast nowych zakładek, ale działa do pewnego momentu; nie były szeroko testowane. Aby użyć tego w zwykłym pliku wsadowym (CMD.exe), prawdopodobnie musisz mieć już otwarte okno. Dzielę się czymś, na co się natknąłem. ZMIENIONO w celu wyjaśnienia.

river_mouse
źródło
-7
<a href="http://www.google.com/" target="_self">New Tab Example</a>

Działa w IE7.

Pozdrowienia,

Glenn

Glenn Moore
źródło
8
Glenn, jest to przeciwieństwo tego, o co prosił PO. _self otworzy dokument w tym samym oknie lub ramce.
travega
Nie jest to również sposób na automatyczne otwieranie. Zaskakujące jest to, że dzięki tej odpowiedzi zyskuje +10 powtórzeń (+ 3 / -10).
vusan,