JavaScript: location.href, aby otworzyć w nowym oknie / karcie?

389

Mam plik JavaScript od zewnętrznego programisty. Ma link, który zastępuje bieżącą stronę celem. Chcę mieć tę stronę otwartą w nowej karcie.

Oto co mam do tej pory:

if (command == 'lightbox') {
 location.href="https://support.wwf.org.uk/earth_hour/index.php?type=individual";
}

Czy ktoś może mi pomóc?

iamjonesy
źródło

Odpowiedzi:

930
window.open(
  'https://support.wwf.org.uk/earth_hour/index.php?type=individual',
  '_blank' // <- This is what makes it open in a new window.
);
alex
źródło
102
Warto wspomnieć: o tym, czy tworzona jest nowa karta czy okno, decyduje przeglądarka (ustawienie).
jAndy
4
@alex Zredagowałem tę odpowiedź, aby ważny bit był czytelny. Jeśli nie akceptujesz mojego formatowania, czy mogę zasugerować skrócenie adresu URL, aby drugi parametr mieścił się w regionie przewijania?
Phrogz,
5
@ErickBest To nieprawda. "_blank"gwarantuje, że okno / karta będą nowe. Wszystko inne (poza innymi nazwami specjalnymi) nadaje temu oknu konkretną nazwę, a kolejne łącza do tego celu ponownie go wykorzystają. jsFiddle .
alex
2
To po prostu wyzwala powiadomienie wyskakujące w nowoczesnych przeglądarkach, w ogóle nie symuluje _blankkliknięcia kotwicy.
Nathan Hornby
22
wyskakujące okienko zapobiegane przez przeglądarkę.
Jitendra Pancholi,
24

Jeśli chcesz użyć, location.hrefaby uniknąć problemów z wyskakującymi oknami, możesz użyć pustego <a>ref, a następnie użyć javascript, aby go kliknąć.

coś jak w HTML

<a id="anchorID" href="mynewurl" target="_blank"></a>

Następnie javascript kliknij go w następujący sposób

document.getElementById("anchorID").click();
andrew field
źródło
13
Miałem nadzieję na to rozwiązanie, jednak nadal wydaje się, że powoduje wyskakujące okienko (przynajmniej w Chrome). Mam wrażenie, że przeglądarka wie, że to kliknięcie javascript i traktuje to inaczej.
Nathan Hornby
1
Dziękuję Nathan. Masz całkowitą rację. Nadal pojawia się wyskakujący komunikat blokujący. Myślałem, że to wyleczyłem. Teoretycznie powinno to zadziałać. Andrew
andrew field
2
$("#anchorID")[0].click(); używać tego rozwiązania z jquery.
theBell
1
Lol theBell, To nie jest jQuery, jeśli uzyskujesz bezpośredni dostęp do DOM Element[0]
Andre Figueiredo
7

Możesz go otworzyć w nowym oknie za pomocą window.open('https://support.wwf.org.uk/earth_hour/index.php?type=individual');. Jeśli chcesz otworzyć go w nowej karcie, otwórz bieżącą stronę na dwóch kartach, a następnie zezwól na uruchomienie skryptu, aby uzyskać zarówno bieżącą stronę, jak i nową stronę.

użytkownik616639
źródło
6

Pure js alternatywa dla window.open

let a= document.createElement('a');
a.target= '_blank';
a.href= 'https://support.wwf.org.uk/';
a.click();

Oto działający przykład (fragmenty przepływu stosu nie pozwalają na otwarcie)

Kamil Kiełczewski
źródło
0

Na przykład:

    $(document).on('click','span.external-link',function(){
        var t               = $(this), 
            URL             = t.attr('data-href');        
        $('<a href="'+ URL +'" target="_blank">External Link</a>')[0].click();

    });

Praca przykładem .


źródło
Wyskakujące okienko zapobiega przeglądarce.
Millar248
1
Oznacza to, że masz blok reklamowy lub coś innego, co go blokuje. Domyślne zachowanie powinno działać w normalnych warunkach
Andrey Seregin
0

Możesz także otworzyć nową kartę wywołującą metodę akcji z takim parametrem:

   var reportDate = $("#inputDateId").val();
   var url = '@Url.Action("PrintIndex", "Callers", new {dateRequested = "findme"})';
   window.open(window.location.href = url.replace('findme', reportDate), '_blank');
Primoshenko
źródło
Czy wymagana jest pierwsza i druga linia? Czy to nie zadziała bez zmiennych reportDatei url?
Naucz się dla zabawy
Możesz wyjąć parametr (reportDate), ale adres URL var jest ważny, ponieważ zawiera wywołanie metody działania.
Primoshenko