Открытие URL-адреса в новой вкладке (а не в новом окне) с помощью JavaScript

Я пытаюсь открыть URL в новой вкладке, а не во всплывающем окне.

Я'видел похожие вопросы, где ответы выглядели примерно так:

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

Но ни один из них не сработал для меня, браузер по-прежнему пытался открыть всплывающее окно.

Комментарии к вопросу (16)

Это трюк,

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

В большинстве случаев, это должно произойти непосредственно в функция onclick` обработчик для ссылки, чтобы предотвратить блокировку всплывающих окон и по умолчанию "в новом окне" и поведение. Вы могли бы сделать это таким образом, или путем добавления слушателя события для объекта "дом".

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

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

Комментарии (32)
Решение

Автор ничего не может сделать, чтобы выбрать открытие в новой вкладке вместо нового окна; это предпочтение пользователя.

CSS3 предлагал target-new, но от этой спецификации отказались.

Обратное** не верно; указав размеры окна в третьем аргументе window.open(), вы можете вызвать новое окно, когда предпочтение отдается вкладкам.

Комментарии (31)

окна.открыть() не будет открываться в новой вкладке, если это не происходит на фактическое событие click. В приведенном примере URL-адрес будет открыт на реальное событие click. Это будет работать при условии, что пользователь имеет соответствующие настройки в браузере.

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

Аналогично, если вы пытаетесь сделать AJAX-вызов внутри функции click и хотите открыть окно на успех, убедитесь, что вы делаете AJAX-вызов с использованием ключевых слов async : параметр значение false.

Комментарии (15)

окно#`.открыть не может надежно открывать всплывающие окна в новой вкладке во всех браузерах

Разные браузеры реализуют поведение окна.откройте по-разному, особенно с учетом пользователя's в настройках браузера. Вы не можете ожидать такое же поведение для окна.открыть`, чтобы быть правдой во всех интернет Explorer, Firefox и Chrome, из-за различных способов, в которых они обрабатывают пользователя'настройки с браузера.

Например, интернет&ампер;усилитель; nbsp;проводник (11) пользователи могут выбрать, чтобы открыть всплывающие окна в новом окне или новой вкладке, вы не можете заставить интернет&ампер;усилитель; nbsp;Обозреватель&ампер;усилитель; nbsp;11 пользователям открывать всплывающие окна в определенном смысле через окно.открыть`, как отмечено в Квентин'ы ответить.

Как и для Firefox (29) пользователи, через окно.открыть(URL-адрес, 'настроек')` зависит от браузера'ы вкладке Настройки хотя вы все еще можете заставить их открывать всплывающие окна в новом окне с указанием ширины и высоты (см. "что о Chrome?&и" раздел ниже).

Демонстрация

Зайти в браузер'параметры S и настроить его, чтобы открыть всплывающие окна в новом окне.

Интернет Эксплорер (11)

Тест ## Страница

После настройки Интернет Эксплорер (11) открывать всплывающие окна в новом окне, как показано выше, используйте следующую тестовую страницу в окне теста.открыт`:




    Test




      <code>window.open(url)</code>


      <code>window.open(url, '_blank')</code>


Заметим, что окна открыты в новом окне, а не в новой вкладке.

Вы также можете проверить эти фрагменты выше в Firefox (29) со своей вкладке "Настройки" установить новые окна, и увидеть те же результаты.

А Что Насчет Хрома? Он реализует окна`.открывай по-разному из интернета&ампер;усилитель; nbsp;проводник (11) и Firefox (29).

Я'м не уверен на 100%, но похоже, что хром (версия 34.0.1847.131 м) не оказывает какого-либо параметры, которые пользователь может использовать, чтобы выбрать, будет ли или не открывать всплывающие окна в новом окне или новой вкладке (как Firefox и Internet&ампер;усилитель; nbsp;проводника). Я проверил хром документации для управления всплывающие окна, но это не'т не упоминал о такого рода вещи.

Кроме того, в очередной раз, похоже, разные браузеры, чтобы реализовать поведение окна.откройте по-разному. В Chrome и Firefox, с указанием ширины и высоты заставит всплывающее окно, даже когда пользователь имеет установить Firefox (29), чтобы открывать новые окна в новой вкладке (как уже упоминалось в ответах на [JavaScript-код откроется в новом окне, а не вкладке][Другие]):




    Test




      <code>window.open(url)</code>


Однако в том же фрагменте кода выше всегда открыть новую вкладку в Internet&ампер;усилитель; nbsp;Обозреватель&ампер;усилитель; nbsp;11 если пользователи вкладок в браузере предпочтения, даже не указание ширины и высоты силу новое всплывающее окно для них.

Так что поведение окне.откройте в Chrome, кажется, чтобы открыть всплывающие окна в новой вкладке при использовании в функция onclick событие, чтобы открывать их в новых окнах при использовании в браузере консоли ([как отмечали другие люди][примечание]), и открывать их в новых окнах при указании ширины и высоты.

Резюме

Разные браузеры реализуют поведение окна.откройте по-разному по отношению к пользователям' настройки браузера. Вы не можете ожидать такое же поведение для окна.открыть`, чтобы быть правдой во всех интернет Explorer, Firefox и Chrome, из-за различных способов, в которых они обрабатывают пользователя'настройки с браузера.

Дополнительное Чтение

  • [окна`.открывайте документацию][документ doc].
Комментарии (2)

Один лайнер:

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

Он создает виртуальную " а " элемента, дает ему цель=то"настроек" и поэтому он открывает в новой вкладке, дает ему правильного URL-адрес рот и нажимает ее.

И если вы хотите, основываясь на том, что можно создать какую-то функцию:

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

и затем вы можете использовать его как:

openInNewTab("http://google.com"); 
Комментарии (6)

Если вы используете окно`.открыть(URL-адрес, 'настроек'), она будет заблокирована (блокировка всплывающих окон) на Хром.

Попробуйте это:

//With JQuery

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

С чистого JavaScript,

document.querySelector('#myButton').onclick = function() {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
};
Комментарии (9)

Чтобы уточнить ответ Стивена Спилберга', я сделал это в таком случае:

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

Таким образом, непосредственно перед тем, как браузер перейдет по ссылке, я устанавливаю атрибут target, чтобы ссылка открылась в новой вкладке или окне (зависит от настроек пользователя).

Комментарии (1)

Я использую следующие, и она работает очень хорошо!!!

window.open(url, '_blank').focus();
Комментарии (3)

Интересным фактом является то, что новая вкладка не может быть открыт, если действие не вызывается пользователем (нажатие кнопки или что-то) или если он является асинхронным, например, это не открыть в новой вкладке:

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

Но это может открыть в новой вкладке, В зависимости от настроек браузера:

$.ajax({
    url: "url",
    type: "POST",
    async: false,
    success: function() {
        window.open('url', '_blank');              
    }
});
Комментарии (4)

Я думаю, что вы не можете контролировать это. Если пользователь настроил свой браузер на открытие ссылок в новом окне, вы не сможете заставить его открывать ссылки в новой вкладке.

https://stackoverflow.com/questions/726761/javascript-open-in-a-new-window-not-tab

Комментарии (0)

Просто опускаю [strWindowFeatures] параметры можно открыть новую вкладку, если переопределяет настройки браузера (настройки браузера козыри на JavaScript).

Новом окне

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

Вкладка ###новый

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

... или ...

var myWin = window.open(strUrl);
Комментарии (1)

Вы можете использовать трюк с форма:

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

function openNewTab(link) {
    var frm = $('')
    $("body").append(frm);
    frm.submit().remove();
}

[jsFiddle демо][1]

Комментарии (3)
(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')))
Комментарии (3)

Это не имеет ничего общего с настройками браузера Если вы пытаетесь открыть новую вкладку из пользовательской функции.

На этой странице, откройте консоль JavaScript и тип:

в

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

И он будет пытаться открыть всплывающее окно, независимо от настроек, потому что 'нажмите' происходит от пользовательских действий.

Для того, чтобы вести себя как настоящий 'мыши' по ссылке, вы должны следовать @spirinvladimir'ы советы и действительно создайте его:

в

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

Вот полный пример (не пытайтесь повторить это на [jsFiddle][1] или подобные онлайн редакторы, как это не позволит вам перенаправлять на внешние страницы оттуда):





    #firing_div {
      margin-top: 15px;
      width: 250px;
      border: 1px solid blue;
      text-align: center;
    }



  <a id="my_link" href="http://www.google.com"> Go to Google </a>
  <div id="firing_div"> Click me to trigger custom click </div>

<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>
Комментарии (6)
function openTab(url) {
  const link = document.createElement('a');
  link.href = url;
  link.target = '_blank';
  document.body.appendChild(link);
  link.click();
  link.remove();
}
Комментарии (2)

Есть ответ на этот вопрос и не нет.

Я нашел легко обойти:

Шаг 1: создать невидимую ссылке:

в <идентификатор="и yourId" и с href="и yourlink.HTML-код как" цель=то"настроек" в стиле=на"дисплей: нет; с"></а>

Шаг 2: Нажмите на эту ссылку программно:

документ.метода getElementById("и yourId и").нажмите кнопку();`

Здесь вы идете! Работает шарм для меня.

Комментарии (1)

Или вы могли бы просто создать элемент ссылку и нажмите на нее...

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

Это стоило'т быть заблокирован всплывающих окон... надеюсь.

Комментарии (3)

Как насчет создания в <а> с настроек как цель значение атрибута и адрес, как близко, с дисплеем стиль:скрытые с детской элемента? Затем добавить к DOM, а затем вызвать событие click на дочерний элемент.

Обновление # # ##

Это вовсе'т работу. Браузер предотвращает поведение по умолчанию. Она может быть вызвана программно, но это вовсе'т следовать поведение по умолчанию.

Проверьте и убедитесь сами: http://jsfiddle.net/4S4ET/

Комментарии (1)

Если это то, что вы просто пытаетесь нагрузка на элемент, попробуйте использовать эту. При загрузке страницы он будет добавить вашу цель свойства с нужным атрибутом.

$(your_element_here).опора('цели', 'настроек');

Комментарии (1)

Это может быть хак, но в Firefox если указать третий параметр, 'полноэкранный=да', он открывает свежее новое окно.

Например,

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

Похоже, на самом деле переопределить настройки браузера.

Комментарии (1)