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?

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

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

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ę.


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)


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 .


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.