Chrome, Javascript, window.open на новой вкладке

В chrome это открывается на новой вкладке:

<button onclick="window.open('newpage.html', '_blank')" />

это открывается в новом окне (но я хотел бы, чтобы это открылось и на новой вкладке:

<script language="javascript">
  window.open('newpage.html', '_blank');
</script>

Возможно ли это?

Ответ 1

Вы не можете напрямую управлять этим, потому что это опция, управляемая пользователями Internet Explorer.

Открытие страниц с использованием Window.open с другим именем окна откроется в новом окне браузера, как всплывающее окно, или откроется на новой вкладке, если пользователь настроил браузер для этого.

EDIT:

Более подробное объяснение:

1. В современных браузерах window.open откроется на новой вкладке, а не на всплывающем окне.

2. Вы можете заставить браузер использовать новое окно ( "всплывающее окно" ), указав параметры в третьем параметре

3. Если вызов window.open не был частью инициированного пользователем события, он откроется в новом окне.

4. "Событие, инициированное пользователем", не имеет одного и того же вызова функции, но оно должно исходить из функции, вызванной щелчком пользователя

5. Если инициированное пользователем событие делегирует или отменяет вызов функции (в прослушивателе события или делегировании, не связанном с событием клика, или, например, с использованием setTimeout), он теряет свой статус как "пользователь инициировал"

6. Некоторые блокирующие всплывающие окна позволят открывать окна из инициированных пользователем событий, но не открываются в противном случае.

7. Если какое-либо всплывающее окно заблокировано, иногда блокируются также те, которые обычно разрешены блокировщиком (через инициированные пользователем события). Некоторые примеры...

Принудительное открытие окна в новом экземпляре браузера вместо новой вкладки:

window.open('page.php', '', 'width=1000');

Следующее будет квалифицироваться как инициированное пользователем событие, даже если оно вызывает другую функцию:

function o(){
  window.open('page.php');
}
$('button').addEvent('click', o);

Следующее не будет квалифицироваться как инициированное пользователем событие, так как setTimeout отменит его:

function g(){
  setTimeout(o, 1);
}
function o(){
  window.open('page.php');
}
$('button').addEvent('click', g);

Ответ 2

Иногда полезно принудительно использовать вкладку, если пользователю это нравится. Как сказал Пракаш выше, это иногда продиктовано использованием события, инициированного не пользователем, но есть способы обойти это.

Например:

$("#theButton").button().click( function(event) {
   $.post( url, data )
   .always( function( response ) {
      window.open( newurl + response, '_blank' );
   } );
} );

всегда будет открывать "newurl" в новом окне браузера, поскольку функция "always" не считается инициированной пользователем. Однако, если мы это сделаем:

$("#theButton").button().click( function(event) {
   var newtab = window.open( '', '_blank' );
   $.post( url, data )
   .always( function( response ) {
      newtab.location = newurl + response;
   } );
} );

мы открываем новое окно браузера или создаем новую вкладку, как определено пользовательским предпочтением, при нажатии кнопки, которая инициируется пользователем. Затем мы просто укажем местоположение на нужный URL после возвращения из сообщения AJAX. Voila, мы вынуждаем использовать вкладку, если пользователю это нравится.

Ответ 3

На данный момент (Chrome 39) я использую этот код, чтобы открыть новую вкладку:

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

Ответ 4

если вы используете window.open(url, '_blank'), он будет заблокирован (блокировщик всплывающих окон) в Chrome, Firefox и т.д.

попробуйте это,

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

рабочий js скрипт для этого http://jsfiddle.net/safeeronline/70kdacL4/2/

рабочий js скрипт для открытия ajax http://jsfiddle.net/safeeronline/70kdacL4/1/

Ответ 5

Это откроет ссылку на новой вкладке в Chrome и Firefox и, возможно, больше браузеров, которые я не тестировал:

var popup  = $window.open("about:blank", "_blank"); // the about:blank is to please Chrome, and _blank to please Firefox
popup.location = 'newpage.html';

В основном открывается новая пустая вкладка, а затем устанавливается местоположение этой пустой вкладки. Помните, что это своего рода хак, поскольку поведение браузера/окна - это действительно домен, ответственность и выбор браузера и пользователя.

Вторая строка может быть вызвана в обратном вызове (после того, как вы сделали некоторый запрос AJAX, например), но тогда браузер не узнает его как инициированное пользователем клик-событие и может заблокировать всплывающее окно.

Ответ 6

Очистить мини-решение $('<form action="http://samedomainurl.com/" target="_blank"></form>').submit()

Ответ 7

Вы можете использовать этот код для открытия на новой вкладке.

function openWindow( url )
{
  window.open(url, '_blank');
  window.focus();
}

Я получил его из fooobar.com/questions/61020/.....

Ответ 8

var event = new MouseEvent('click', {
    shiftKey: true
});

domElement.dispatchEvent(event);

Ответ 9

Лучший способ использования:

1- добавить ссылку на ваш html:

<a id="linkDynamic" target="_blank" href="#"></a>

2- добавить функцию JS:

function OpenNewTab(href)
{
    document.getElementById('linkDynamic').href = href;
    document.getElementById('linkDynamic').click();
}

3- просто вызовите функцию OpenNewTab со ссылкой, которую вы хотите