Otwórz adres URL w nowej karcie (a nie w nowym oknie)

Próbuję otworzyć URL w nowej karcie, w przeciwieństwie do wyskakującego okna.

Widziałem podobne pytania, na których odpowiedzi wyglądałyby mniej więcej tak:

window.open(url,'_blank');
window.open(url);

Ale żaden z nich nie działał dla mnie, przeglądarka nadal próbowała otworzyć wyskakujące okno.

 2300
Author: Alexander Abakumov, 2011-02-05

30 answers

Nic, co autor może zrobić, nie może otworzyć nowej karty zamiast nowego okna; jest to preferencja użytkownika . (Zauważ, że domyślne preferencje użytkownika w większości przeglądarek dotyczą nowych kart, więc trywialny test przeglądarki, w której ta preferencja nie została zmieniona, nie pokaże tego.)

CSS3 zaproponował target-Nowy , ale zrezygnowano ze specyfikacji .

Odwrotne nie jest prawdziwe ; poprzez podanie pewnych cech okien dla okno w trzecim argumencie window.open() możesz wywołać nowe okno, gdy preferowane są karty.

 1014
Author: Quentin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-06 16:49:29

To jest sztuczka,

function openInNewTab(url) {
  var win = window.open(url, '_blank');
  win.focus();
}

W większości przypadków powinno to nastąpić bezpośrednio w obsłudze onclick dla łącza, aby zapobiec blokowaniu wyskakujących okienek i domyślnemu zachowaniu "nowego okna". Można to zrobić w ten sposób lub dodając detektor zdarzeń do obiektu DOM.

<div onclick="openInNewTab('www.test.com');">Something To Click On</div>

Http://www.tutsplanet.com/open-url-new-tab-using-javascript/

 1866
Author: Rinto George,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-27 07:36:02

window.open() nie otworzy się na nowej karcie, jeśli nie dzieje się to podczas rzeczywistego zdarzenia kliknięcia. W podanym przykładzie adres URL jest otwierany w rzeczywistym przypadku kliknięcia. będzie to działać pod warunkiem, że użytkownik ma odpowiednie ustawienia w przeglądarce.

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

Podobnie, jeśli próbujesz wykonać wywołanie Ajax w funkcji click I chcesz otworzyć okno po pomyślnym zakończeniu, upewnij się, że wykonujesz wywołanie Ajax z ustawioną opcją async : false.

 396
Author: Venkat Kotra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 00:23:16

Jedna linijka:

Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();

Tworzy wirtualny a element, daje go target="_blank" więc otwiera się w nowej karcie, nadaje mu właściwy url href a potem klikamy.

I jeśli chcesz, na podstawie tego możesz utworzyć jakąś funkcję:

function openInNewTab(href) {
  Object.assign(document.createElement('a'), {
    target: '_blank',
    href: href,
  }).click();
}

I wtedy możesz go użyć w następujący sposób:

openInNewTab("https://google.com"); 

Ważna uwaga:

openInNewTab (jak również wszelkie inne rozwiązania na tej stronie) muszą być wywołane podczas wywołania zwrotnego akcji użytkownika-np. wewnątrz zdarzenia click (nie jest konieczne w funkcji callback bezpośrednio, ale podczas kliknij akcję).

Jeśli wywołasz go ręcznie w jakimś przypadkowym momencie (np. w interwale lub po odpowiedzi serwera) - może być zablokowana przez przeglądarkę (co ma sens, ponieważ stanowiłoby to zagrożenie bezpieczeństwa i może prowadzić do bardzo słabego doświadczenia użytkownika)

 265
Author: Adam Pietrasiak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-11 23:30:56

window.open nie można niezawodnie otwierać wyskakujących okienek w nowej karcie we wszystkich przeglądarkach

Różne przeglądarki implementują zachowanie window.open na różne sposoby, w szczególności w odniesieniu do preferencji przeglądarki użytkownika. Nie można oczekiwać, że to samo zachowanie window.open będzie prawdziwe we wszystkich przeglądarkach Internet Explorer, Firefox i Chrome, ze względu na różne sposoby obsługi preferencji przeglądarki użytkownika.

Na przykład użytkownicy Internet Explorera (11) mogą wybrać otwieranie wyskakujących okienek w nowym oknie lub nowej karcie, nie można wymusić na użytkownikach programu Internet Explorer 11 otwierania wyskakujących okienek w określony sposób poprzez window.open, Jak wspomniałem w odpowiedzi Quentina.

Jeśli chodzi o użytkowników Firefoksa (29), za pomocą window.open(url, '_blank') w zależności od preferencji karty przeglądarki, można jednak zmusić je do otwierania wyskakujących okienek w nowym oknie, określając szerokość i wysokość (zobacz "co z Chrome?"sekcja poniżej).

Demonstracja

Przejdź do przeglądarki ustawienia i skonfiguruj go, aby otwierał wyskakujące okienka w nowym oknie.

Internet Explorer (11)

Okno ustawień przeglądarki Internet Explorer 1

Okno ustawień karty Internet Explorer

Strona Testowa

Po skonfigurowaniu programu Internet Explorer (11) do otwierania wyskakujących okienek w nowym oknie, jak pokazano powyżej, użyj następującej strony testowej, aby przetestować window.open:

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
  </head>

  <body>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814');">
      <code>window.open(url)</code>
    </button>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814', '_blank');">
      <code>window.open(url, '_blank')</code>
    </button>
  </body>
</html>

Zauważ, że wyskakujące okienka są otwarte w nowym oknie, a nie w nowej karcie.

Możesz również przetestować powyższe fragmenty w Firefoksie (29) za pomocą jego zakładki preferencja Ustaw na nowe okna i zobacz te same wyniki.

A Co Z Chromem? Implementuje window.open inaczej niż Internet Explorer (11) i Firefox (29).

Nie jestem w 100% pewien, ale wygląda na to, że Chrome (wersja 34.0.1847.131 m) nie wydaje się mieć żadnych ustawień, które użytkownik może użyć, aby wybrać, czy otworzyć popups w nowym oknie lub nowej karcie(jak Firefox i Internet Explorer mają). Sprawdziłem dokumentację Chrome do zarządzania pop-upami , ale nie wspominać o czymś takim.

Również po raz kolejny różne przeglądarki zdają się implementować zachowanie window.open inaczej. W Chrome i Firefoksie, podanie szerokości i wysokości wymusi wyskakujące okienko, nawet jeśli użytkownik ustawił Firefoksa (29), aby otwierał nowe okna na nowej karcie (jak wspomniano w odpowiedziach na JavaScript otwiera się w nowym oknie, a nie na karcie):

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
  </head>

  <body>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814', 'test', 'width=400, height=400');">
      <code>window.open(url)</code>
    </button>
  </body>
</html>

Jednak ten sam fragment kodu powyżej będzie zawsze otwórz nową kartę w przeglądarce Internet Explorer 11 jeśli użytkownicy ustawią karty jako Preferencje przeglądarki, to nawet podanie szerokości i wysokości wymusi dla nich nowe wyskakujące okno.

Tak więc zachowanie window.open w Chrome wydaje się otwierać wyskakujące okienka w nowej karcie, gdy są używane w zdarzeniu onclick, otwierać je w nowych oknach, gdy są używane z konsoli przeglądarki (, jak zauważyły inne osoby ) i otwierać je w nowych oknach, gdy są określone szerokością i wzrost.

Podsumowanie

Różne przeglądarki implementują zachowanie window.open inaczej w odniesieniu do preferencji przeglądarki użytkowników. Nie można oczekiwać, że to samo zachowanie window.open będzie prawdziwe we wszystkich przeglądarkach Internet Explorer, Firefox i Chrome, ze względu na różne sposoby obsługi preferencji przeglądarki użytkownika.

Dodatkowe Czytanie

 256
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 00:28:30

Jeśli użyjesz window.open(url, '_blank'), Zostanie ona zablokowana (popup blocker) w Chrome.

Spróbuj tego:

//With JQuery

$('#myButton').click(function () {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
});

Z czystym JavaScript,

document.querySelector('#myButton').onclick = function() {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
};
 93
Author: Mohammed Safeer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-24 03:24:18

Aby rozwinąć odpowiedź Stevena Spielberga, zrobiłem to w takim przypadku:

$('a').click(function() {
  $(this).attr('target', '_blank');
});

W ten sposób, tuż przed przeglądarką podążam za linkiem ustawiam atrybut target, dzięki czemu link otworzy się w nowej karcie lub oknie (zależy od ustawień Użytkownika ).

Przykład jednej linii w jQuery:

$('a').attr('target', '_blank').get(0).click();
// The `.get(0)` must be there to return the actual DOM element.
// Doing `.click()` on the jQuery object for it did not work.

Można to również osiągnąć za pomocą natywnych API Dom przeglądarki:

document.querySelector('a').setAttribute('target', '_blank');
document.querySelector('a').click();
 71
Author: arikfr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-14 21:58:44

Używam następujących i działa bardzo dobrze!

window.open(url, '_blank').focus();
 68
Author: Ezequiel García,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-27 21:03:59

Myślę, że nie możesz tego kontrolować. Jeśli użytkownik skonfigurował przeglądarkę tak, aby otwierała łącza w nowym oknie, nie można wymusić tego, aby otwierały łącza na nowej karcie.

JavaScript otwiera się w nowym oknie, a nie w zakładce

 20
Author: Fran Verona,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:01

Ciekawostką jest to, że nowa karta nie może zostać otwarta, jeśli akcja nie jest wywoływana przez użytkownika (kliknięcie przycisku lub czegoś takiego) lub jeśli jest asynchroniczna, na przykład nie otworzy się w nowej karcie:

$.ajax({
    url: "url",
    type: "POST",
    success: function() {
        window.open('url', '_blank');              
    }
});

Ale może się to otworzyć w nowej karcie, w zależności od ustawień przeglądarki:

$.ajax({
    url: "url",
    type: "POST",
    async: false,
    success: function() {
        window.open('url', '_blank');              
    }
});
 19
Author: karaxuna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-23 20:10:50

Po prostu pominięcie parametrów [strWindowFeatures] otworzy nową kartę, chyba że ustawienia przeglądarki przesłonią (ustawienia przeglądarki przewyższają JavaScript).

Nowe okno

var myWin = window.open(strUrl, strWindowName, [strWindowFeatures]);

Nowa karta

var myWin = window.open(strUrl, strWindowName);

-- lub --

var myWin = window.open(strUrl);
 13
Author: MannyC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 00:31:49
(function(a){
document.body.appendChild(a);
a.setAttribute('href', location.href);
a.dispatchEvent((function(e){
    e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
    return e
}(document.createEvent('MouseEvents'))))}(document.createElement('a')))
 12
Author: spirinvladimir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-19 09:27:06

Nie ma to nic wspólnego z ustawieniami przeglądarki , Jeśli próbujesz otworzyć nową kartę z niestandardowej funkcji.

Na tej stronie otwórz konsolę JavaScript i wpisz:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").click();

I będzie próbował otworzyć wyskakujące okienko niezależnie od ustawień, ponieważ "kliknięcie" pochodzi z niestandardowej akcji.

Aby zachować się jak rzeczywiste "kliknięcie myszką" na link, musisz postępować zgodnie z @spirinvladimir Rady i naprawdę utworzyć go:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").dispatchEvent((function(e){
  e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
                    false, false, false, false, 0, null);
  return e
}(document.createEvent('MouseEvents'))));

Oto kompletny przykład (nie próbuj go na jsFiddle lub podobnych edytorach internetowych, ponieważ nie pozwoli Ci przekierować do zewnętrznych stron stamtąd):

<!DOCTYPE html>
<html>
<head>
  <style>
    #firing_div {
      margin-top: 15px;
      width: 250px;
      border: 1px solid blue;
      text-align: center;
    }
  </style>
</head>
<body>
  <a id="my_link" href="http://www.google.com"> Go to Google </a>
  <div id="firing_div"> Click me to trigger custom click </div>
</body>
<script>
  function fire_custom_click() {
    alert("firing click!");
    document.getElementById("my_link").dispatchEvent((function(e){
      e.initMouseEvent("click", true, true, window, /* type, canBubble, cancelable, view */
            0, 0, 0, 0, 0,              /* detail, screenX, screenY, clientX, clientY */
            false, false, false, false, /* ctrlKey, altKey, shiftKey, metaKey */
            0, null);                   /* button, relatedTarget */
      return e
    }(document.createEvent('MouseEvents'))));
  }
  document.getElementById("firing_div").onclick = fire_custom_click;
</script>
</html>
 12
Author: chipairon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:45

Możesz użyć triku z form:

$(function () {
    $('#btn').click(function () {
        openNewTab("http://stackoverflow.com")
        return false;
    });
});

function openNewTab(link) {
    var frm = $('<form   method="get" action="' + link + '" target="_blank"></form>')
    $("body").append(frm);
    frm.submit().remove();
}

Jsfiddle demo

 12
Author: CodeNinja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 00:34:52
function openTab(url) {
  const link = document.createElement('a');
  link.href = url;
  link.target = '_blank';
  document.body.appendChild(link);
  link.click();
  link.remove();
}
 10
Author: Andrew Luca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-26 09:24:53

To, czy otworzyć adres URL w nowej karcie, czy w nowym oknie, jest w rzeczywistości kontrolowane przez Preferencje przeglądarki użytkownika. Nie ma możliwości nadpisania go w JavaScript.

window.open() zachowuje się inaczej w zależności od tego, jak jest używany. Jeśli jest to wywołane jako bezpośredni wynik działania użytkownika , powiedzmy kliknięcie przycisku, powinno działać dobrze i otworzyć nową kartę (lub Okno):

const button = document.querySelector('#openTab');

// add click event listener
button.addEventListener('click', () => {
    // open a new tab
    const tab = window.open('https://attacomsian.com', '_blank');
});
Jeśli jednak spróbujesz otworzyć nową kartę z wywołania zwrotnego żądania AJAX , przeglądarka ją zablokuje ponieważ nie było to bezpośrednie działanie użytkownika.

Aby ominąć popup blocker i otworzyć nową kartę z wywołania zwrotnego, oto mały hack :

const button = document.querySelector('#openTab');

// add click event listener
button.addEventListener('click', () => {

    // open an empty window
    const tab = window.open('about:blank');

    // make an API call
    fetch('/api/validate')
        .then(res => res.json())
        .then(json => {

            // TODO: do something with JSON response

            // update the actual URL
            tab.location = 'https://attacomsian.com';
            tab.focus();
        })
        .catch(err => {
            // close the empty window
            tab.close();
        });
});
 5
Author: attacomsian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-24 09:41:40

JQuery

$('<a />',{'href': url, 'target': '_blank'}).get(0).click();

JS

Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
 4
Author: Bryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-05 18:43:49

Lub możesz po prostu utworzyć element łącza i kliknąć go...

var evLink = document.createElement('a');
evLink.href = 'http://' + strUrl;
evLink.target = '_blank';
document.body.appendChild(evLink);
evLink.click();
// Now delete it
evLink.parentNode.removeChild(evLink);

To nie powinno być blokowane przez blokery wyskakujących okienek... Mam nadzieję.

 3
Author: Luke Alderton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-06 17:22:24

Jest odpowiedź na to pytanie, A Nie Nie.

Znalazłem łatwą pracę:

Krok 1: Utwórz niewidoczny link:

<a id="yourId" href="yourlink.html" target="_blank" style="display: none;"></a>

Krok 2: Kliknij na ten link programowo:

document.getElementById("yourId").click();

Proszę bardzo! To dla mnie urok.
 3
Author: ALZlper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-21 19:37:53

Tutaj wpisz opis obrazka

Zbadałem wiele informacji o tym, jak otworzyć nową kartę i pozostać na tej samej karcie. Znalazłem jedną małą sztuczkę, żeby to zrobić. Załóżmy, że masz url, który musisz otworzyć - newUrl i stary url - currentUrl , który musisz pozostać po otwarciu nowej karty. Kod JS będzie wyglądał mniej więcej tak:

// init urls
let newUrl = 'http://example.com';
let currentUrl = window.location.href;
// open window with url of current page, you will be automatically moved 
// by browser to a new opened tab. It will look like your page is reloaded
// and you will stay on same page but with new page opened
window.open(currentUrl , '_blank');
// on your current tab will be opened new url
location.href = newUrl;
 2
Author: Vaha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-28 09:03:16

Nie używaj target= "_blank"

Zawsze używaj konkretnej nazwy dla tego okna w moim przypadku meaningfulName, w tym przypadku zapisujesz zasoby procesora:

button.addEventListener('click', () => {
    window.open('https://google.com', 'meaningfulName')
})

W ten sposób po kliknięciu na przykład 10 razy na przycisk, przeglądarka zawsze będzie ponownie renderować go w jednej nowej karcie, zamiast otwierać go w 10 różnych kartach, które pochłoną znacznie więcej zasobów.

Możesz przeczytać więcej na ten temat na MDN.

 2
Author: Predrag Davidovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-21 08:16:34

Co powiesz na utworzenie <a> z _blank jako target wartość atrybutu i url jako href, z style display:hidden z elementem a children? Następnie dodaj do DOM, a następnie uruchom Zdarzenie click na elemencie potomnym.

UPDATE

To nie działa. Przeglądarka zapobiega domyślnemu zachowaniu. Może być uruchamiany programowo, ale nie podąża za domyślnym zachowaniem.

Sprawdź i przekonaj się sam: http://jsfiddle.net/4S4ET/

 0
Author: Victor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 00:25:08

To może być hack, ale w Firefoksie jeśli podasz trzeci parametr, 'fullscreen = yes', otworzy się nowe okno.

Na przykład,

<a href="#" onclick="window.open('MyPDF.pdf', '_blank', 'fullscreen=yes'); return false;">MyPDF</a>

Wydaje się, że faktycznie nadpisuje ustawienia przeglądarki.

 0
Author: Kunal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 00:30:26

Otwieranie nowej karty z rozszerzenia Firefox (Mozilla) przebiega następująco:

gBrowser.selectedTab = gBrowser.addTab("http://example.com");
 -1
Author: Smile4ever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-23 16:32:24

Ten sposób jest podobny do powyższego rozwiązania, ale zaimplementowany Inaczej

.social_icon - > jakaś klasa z CSS

 <div class="social_icon" id="SOME_ID" data-url="SOME_URL"></div>


 $('.social_icon').click(function(){

        var url = $(this).attr('data-url');
        var win = window.open(url, '_blank');  ///similar to above solution
        win.focus();
   });
 -1
Author: CG_DEV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-27 16:09:38

To działa dla mnie, wystarczy zapobiec wydarzeniu, dodać adres url do <a> tag Następnie uruchom Zdarzenie kliknięcia tag.

Js
$('.myBtn').on('click', function(event) {
        event.preventDefault();
        $(this).attr('href',"http://someurl.com");
        $(this).trigger('click');
});
HTML
<a href="#" class="myBtn" target="_blank">Go</a>
 -1
Author: Carlos Salazar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-02 02:23:05

window.open(url) otworzy adres url w nowej karcie przeglądarki. Belowe js alternatywa dla it

let a= document.createElement('a');
a.target= '_blank';
a.href= 'https://support.wwf.org.uk/';
a.click(); // we don't need to remove 'a' from DOM because we not add it

Tutaj działa przykład (urywki stackoverflow nie pozwalają na otwarcie nowej karty)

 -1
Author: Kamil Kiełczewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-02 14:33:02

Istnieje wiele kopii odpowiedzi sugerujących użycie "_blank" jako celu, jednak okazało się, że to nie działa. Jak zauważa Prakash, to zależy od przeglądarki. Możesz jednak przedstawić przeglądarce pewne sugestie, takie jak to, czy okno powinno mieć pasek lokalizacji.

Jeśli zasugerujesz wystarczająco "tab-like things" ty Może Pobierz kartę, zgodnie z odpowiedzią Nico na to bardziej szczegółowe pytanie dotyczące chrome :

window.open('http://www.stackoverflow.com', '_blank', 'toolbar=yes, location=yes, status=yes, menubar=yes, scrollbars=yes');

Zastrzeżenie: to jest nie panaceum. To nadal zależy od użytkownika i przeglądarki. Teraz przynajmniej określiłeś jeszcze jedną preferencję, jak chcesz, aby Twoje okno wyglądało.

 -1
Author: c z,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-13 12:16:53

Zgadzam się nieco z osobą, która napisała (parafrazowane tutaj): "w przypadku linku w istniejącej stronie internetowej, przeglądarka zawsze otworzy link w nowej karcie, jeśli nowa strona jest częścią tej samej strony internetowej, co istniejąca strona internetowa."Przynajmniej dla mnie ta" ogólna zasada " działa w Chrome, Firefox, Opera, IE, Safari, SeaMonkey i Konqueror.

W każdym razie, jest mniej skomplikowany sposób, aby wykorzystać to, co druga osoba przedstawiła. Zakładając, że mówimy o Twoim własnym strona www ("thissite.com" poniżej), gdzie chcesz kontrolować, co robi przeglądarka, następnie, poniżej, chcesz " specialpage.htm " być puste, nie ma w nim HTML (oszczędza czas wysyłania danych z serwera!).

 var wnd, URL;  //global variables

 //specifying "_blank" in window.open() is SUPPOSED to keep the new page from replacing the existing page
 wnd = window.open("http://www.thissite.com/specialpage.htm", "_blank"); //get reference to just-opened page
 //if the "general rule" above is true, a new tab should have been opened.
 URL = "http://www.someothersite.com/desiredpage.htm";  //ultimate destination
 setTimeout(gotoURL(),200);  //wait 1/5 of a second; give browser time to create tab/window for empty page


 function gotoURL()
 { wnd.open(URL, "_self");  //replace the blank page, in the tab, with the desired page
   wnd.focus();             //when browser not set to automatically show newly-opened page, this MAY work
 }
 -4
Author: vernonner3voltazim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-23 06:21:23

Jeśli chcesz otwierać tylko Linki zewnętrzne (linki, które prowadzą do innych stron), to ten bit JavaScript / jQuery działa dobrze:

$(function(){
    var hostname = window.location.hostname.replace('www.', '');
    $('a').each(function(){
        var link_host = $(this).attr('hostname').replace('www.', '');
        if (link_host !== hostname) {
            $(this).attr('target', '_blank');
        }
    });
});
 -7
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-23 20:09:24