Chrome, Javascript, window.open в новой вкладке
В chrome это открывается в новой вкладке:
<button onclick="window.open('newpage.html', '_blank')" />
это открывается в новом окне (но я хотел бы, чтобы это открылось и в новой вкладке:
<script language="javascript">
window.open('newpage.html', '_blank');
</script>
Это возможно?
8 ответов
Вы не можете напрямую управлять этим, потому что этот параметр контролируется пользователями Internet Explorer.
Открытие страниц с использованием Window.open с другим именем окна откроется в новом окне браузера, например, во всплывающем окне, ИЛИ откроется на новой вкладке, если пользователь настроил браузер на это.
РЕДАКТИРОВАТЬ:
Более подробное объяснение:
1. В современных браузерах window.open будет открываться в новой вкладке, а не во всплывающем окне.
2. Вы можете заставить браузер использовать новое окно ("всплывающее окно"), указав параметры в третьем параметре
3. Если вызов window.open не был частью события, инициированного пользователем, он откроется в новом окне.
4. "Инициированное пользователем событие" не обязательно должно вызывать один и тот же вызов функции, но оно должно происходить из функции, вызываемой щелчком пользователя.
5. Если инициированное пользователем событие делегирует или откладывает вызов функции (в слушателе события или делегате, не связанном с событием click, или, например, с помощью 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);
Иногда полезно принудительно использовать вкладку, если пользователю это нравится. Как сказал Пракаш выше, это иногда продиктовано использованием события, не инициированного пользователем, но есть способы обойти это.
Например:
$("#theButton").button().click( function(event) {
$.post( url, data )
.always( function( response ) {
window.open( newurl + response, '_blank' );
} );
} );
всегда будет открывать "newurl" в новом окне браузера, поскольку функция "всегда" не считается инициированной пользователем. Однако, если мы сделаем это:
$("#theButton").button().click( function(event) {
var newtab = window.open( '', '_blank' );
$.post( url, data )
.always( function( response ) {
newtab.location = newurl + response;
} );
} );
мы открываем новое окно браузера или создаем новую вкладку, как определено предпочтением пользователя при нажатии кнопки, которая является инициированной пользователем. Затем мы просто устанавливаем местоположение на нужный URL после возвращения из поста AJAX. Вуаля, мы принудительно используем вкладку, если пользователю это нравится.
Если вы используете 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/
На данный момент (Chrome 39) я использую этот код, чтобы открыть новую вкладку:
window.open('http://www.stackru.com', '_blank', 'toolbar=yes, location=yes, status=yes, menubar=yes, scrollbars=yes');
Конечно, это может измениться в будущих версиях Chrome.
Это плохая идея, если вы не можете контролировать браузер, который используют ваши пользователи. Это может не работать в будущих версиях или с другими настройками.
Откроется ссылка в новой вкладке в 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-запрос), но тогда браузер не распознает его как событие click, инициированное пользователем, и может заблокировать всплывающее окно.
Прозрачное мини-решение $('<form action="http://samedomainurl.com/" target="_blank"></form>').submit()
Вы можете использовать этот код, чтобы открыть в новой вкладке..
function openWindow( url )
{
window.open(url, '_blank');
window.focus();
}
Я получил это от stackru..
Лучший способ я использую:
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 с нужной ссылкой