Chrome, Javascript, window.відкрийте в новій вкладці


110

У хромі це відкриється в новій вкладці:

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

це відкриється в новому вікні (але я хотів би, щоб це відкрилося і в новій вкладці:

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

Це можливо?


2
Ви впевнені в тому, що ви стверджуєте? Обидва фрагменти мають однаковий результат.
Denys Séguret

1
Незалежно від того, відкриється вікно на вкладці чи нове вікно, залежить від локального браузера та того, як користувач налаштовує свій браузер - це не те, що ви можете вказати у javascript.
jfriend00

Відповіді:


150

Ви не можете безпосередньо контролювати це, оскільки це варіант, який контролюють користувачі Internet Explorer.

Відкривання сторінок за допомогою Window.open з іншим іменем вікна відкриється в новому вікні браузера, як спливаюче вікно, АБО відкриється на новій вкладці, якщо користувач налаштував браузер для цього.

Редагувати:

Більш детальне пояснення:

1. У сучасних браузерах window.open відкриється на новій вкладці, а не на спливаючому вікні.

2. Ви можете змусити браузер використовувати нове вікно ("спливаюче вікно"), вказавши параметри в 3-му параметрі

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
Я просто хочу додати, що тестуючи в Chrome і FF, я виявив, що використання window.open у тому, що ви визначаєте як "подія, ініційована користувачем", підтримує дію браузера за замовчуванням. Я маю на увазі, що якщо в Chrome ви тримаєте зсув на chrome і натискаєте нове вікно браузера, якщо утримувати ctrl (або натискати середню кнопку миші), нова вкладка відкриється у фоновому режимі. Що дуже приємно, ви можете робити деякі речі, не потрібно розміщувати якірні теги в усьому світі.
Гофман

3
"Якщо виклик window.open не був частиною події, ініційованої користувачем, він відкриється в новому вікні." Ні, він майже точно не відкриється.
TJ Crowder

3
Станом на 29.09.2014, останні Firefox ESR та IE 11 відкривають _blank або window.відкрийте посилання у новому вікні, коли js дзвінки використовують _blank як ім'я вікна. Поточний Chrome не такий простий. Я перевіряв, відкриваючи нове вікно, що проходить у верхній, лівій частині, ширині, висоті, панелі інструментів, розташуванні, каталогах, статусі, меню, панелі прокрутки та зміні розміру, опускаючи кожне з них по черзі. Chrome відкрив їх усі на новій вкладці, за винятком випадків, коли статус, меню та смуги прокрутки були опущені. Це здається настільки довільним, що важко повірити, але емпірично це сталося. Приклад тут: jsbin.com/mobiyeqojaha/1
загадка

34

Іноді корисно змусити використовувати вкладку, якщо користувачеві це подобається. Як зазначено вище Пракаш, це іноді продиктовано використанням події, ініційованої не користувачем, але існують способи цього.

Наприклад:

$("#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. Voila, ми змушуємо використовувати вкладку, якщо користувачеві це подобається.


Я помітив, що якщо у вікні встановлено точку перерви в хромі, відкрийте, тоді браузер відкриє нове вікно. Якщо не допустити порушення коду, схоже, замість цього відкриється нова вкладка.
skinnybrit51

Це нормальне вирішення, якщо ваш window.open та результат функції не потребує 5/6/7 секунд. Подумайте, чи функція надсилає дані на сервер, що генерує PDF, що займає 10 секунд. Відкрийте вікно в порожній вкладці негайно, і користувач дивиться на порожню вкладку протягом 10 секунд, поки магічно вона не заповниться. Все ще на iOS мова йде про єдине рішення.
Кевін Браун

13

якщо ви використовуєте 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/


11

На даний момент (Chrome 39) я використовую цей код, щоб відкрити нову вкладку:

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

Звичайно, це може змінитися в майбутніх версіях Chrome.

Це погана ідея використовувати це, якщо ви не можете керувати веб-переглядачем, яким користуються ваші користувачі. Він може не працювати в майбутніх версіях або з різними налаштуваннями.


Відповідно до коментаря jfriend00, спосіб налаштування браузера визначає спосіб відкриття нових вікон, а не код.
Лі Тейлор

Я згоден з вами, що погана ідея покладатися на таке рішення, якщо ви не можете контролювати своє оточення. Але є деякі ситуації, коли це можливо (наприклад, я використовую це в додатку, який постачається зі своїм власним портативним Chrome). Щоб зробити це зрозумілим, я відредагував свій ансер.
Ніко Відеманн

2
Для тих, хто цікавиться, запуск цього фрагмента коду не працює через цю помилку:VM646 js:12 Blocked opening 'http://www.stackoverflow.com/' in a new window because the request was made in a sandboxed frame whose 'allow-popups' permission is not set.
Benjamin Crouzier

6

Це відкриє посилання на новій вкладці в 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, наприклад), але тоді браузер не розпізнає його як ініційовану користувачем події клацання і може заблокувати спливаюче вікно.


1
$windowце лише спосіб використання AngularJS window. Ви можете просто використовувати windowзамість цього. Більше інформації: docs.angularjs.org/api/ng/service/$window
Магне


0

Ви можете використовувати цей код для відкриття в новій вкладці ..

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

Я отримав це від stackoverflow ..


1
Це працює, але лише в тому випадку, якщо ви користуєтесь обробником кліків користувача. В іншому випадку воно відкриє нове вікно (але принаймні Firefox заблокує вас, поки користувач не дозволить цього).
djsmith

@djsmith, я використовую це .. і стикається з проблемою лише в IE7. Якщо у вас є якесь інше рішення, будь ласка, підкажіть .. Дякую ..
Діліп Райкумар

-2

Найкращий спосіб використання:

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 за потрібним посиланням

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.