JavaScript відкриється в новому вікні, а не вкладці


364

У мене є вікно вибору, яке дзвонить, window.open(url)коли вибрано елемент. Firefox відкриє сторінку на новій вкладці за замовчуванням. Однак я хотів би, щоб сторінка відкривалася в новому вікні, а не в новій вкладці.

Як я можу це досягти?


3
див. приклад на " jsfiddle.net/HLbLu
Michael Freidgeim


Ви можете використовувати github.com/reduardo7/xpopup
Eduardo Cuomo

Відповіді:


456

Дайте вікну параметр "специфікації" з шириною / висотою. Тут можна переглянути всі можливі варіанти.

window.open(url, windowName, "height=200,width=200");

Коли ви вкажете ширину / висоту, вона відкриє її в новому вікні замість вкладки.


5
Гарна порада. Я думаю, що Opera все одно відкриє це у вкладці :).
Кевін Тіге

7
Робота в IE6, FF 3.6, Chrome 9.0
Джеймс Вестгейт

3
Більше не працює у FF 11.0, дивіться моє запитання ! @James
TMS

14
Не працює в сучасних браузерах. За замовчуванням всі вони відкривають нове вікно у новій вкладці поточного вікна. Це також залежить від параметрів браузера. Ви не можете керувати ним за допомогою JavaScript.
Павло Ходек

3
Це НЕ факт, що ви ставите "висота = 200, ширина = 200", які виконують відкриття в новому вікні. Це просто той факт, що потрібно поставити додатковий параметр (місцеположення, статус тощо ... це не має значення)
Петро

110

Вам не потрібно використовувати висоту, просто переконайтеся, що ви використовуєте _blank, Без цього він відкриється в новій вкладці.

Для порожнього вікна:

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');

Для конкретної URL-адреси:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');

3
Але що робити, якщо я хочу дати йому ім’я?
Адіті

Принаймні, у Chrome, location=0це потрібно, коли в JS викликається кнопка або елемент кріплення.
Охад Шнайдер

працював на відмінно. повинні були включати location = 0, а також у firefox.
Рік Джеймс

@nwbrad Ви впевнені в частині "_blank", тому що, наскільки я знаю, "_blank" - це значення за замовчуванням, коли ми не визначаємо жодне інше значення. У вашому випадку відкриття нового вікна замість нової вкладки має щось робити із наданням 3-го параметра для функції window.open. У вашому випадку це "панель інструментів = 0, розташування = 0, меню" 0 ". Ви можете перевірити це, опустивши цей третій параметр і залишивши там "_blank" як другий параметр.
user1451111

Відмінно працює в сучасних браузерах, таких як Firefox 76 та Internet Explorer 11. Порада додає location=0параметри. Я б також запропонував назвати вікно, а не використовувати _blankціль, щоб те саме вікно було використане знову, якщо користувач натискає кілька разів елемент, що відкриває спливаюче вікно, і з'єднати з focus()таким чином, щоб фокус вже відкрився спливаючого вікна:window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();
OuzoPower

82

Можливо, я помиляюся, але, наскільки я розумію, це контролюється налаштуваннями браузера користувача, і я не вірю, що це можна перекрити.


1
Ви маєте рацію, користувач може встановити "about: config" preference "browser.tabs.opentabfor.windowopen" на true, але це глобальна настройка, і я не хочу змінювати глобальну поведінку браузерів наших користувачів;)
adam

45
Я сказав вам, що у мене є код, який працює. Я набрав це в консоль firebug: window.open ("", "poop", "висота = 200, ширина = 200, модальний = так, завждиRaised = так"); і вгадайте, що ??? це працює!!!!!!

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

2
І щоб було зрозуміло, я не маю на увазі, що це злом JavaScript. Додавання висоти та ширини вікна - це явно особливості методу js window.open ( w3schools.com/HTMLDOM/met_win_open.asp ) Я маю на увазі хак у сенсі маніпулювання наміченою поведінкою firefox.
adam

2
Я б насправді не назвав це злом, як такий. Ви просто компромісуєте з тим, якою поведінкою ви насправді хотіли б мати себе, і замість цього реалізуєте.
Матчу

15

Спробуйте:

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");

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


Це працює у FF 31 та Chrome 36, використовуючи лише опцію "modal = так". Всі вказані варіанти також працюють. У мене також встановлено "Відкрити нові вікна в нових вкладках" у моїх налаштуваннях FF. Без відкритих опцій вікна відкриються в новій вкладці.
Клінт Пахл

Після ще одного тестування, здається, майже будь-які параметри ―, поки є хоча б один ―, відкриють нове вікно замість вкладки. Наприклад, просто "top = 0" працює навіть у FF 31 та Chrome 36. Це на OpenBSD за допомогою менеджера вікон cwm. Тому результати можуть відрізнятися.
Клінт Пахл

Чи можу я знати, що таке [ім'я вікна]?
шт.

10

ОК, після того, як зробив багато тесту, ось мій висновок:

Коли ви виконуєте:

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');

або все, що ви введете в поле призначення, це нічого не змінить: нова сторінка відкриється на новій вкладці (так залежить від уподобань користувача)

Якщо ви хочете, щоб сторінка була відкрита в новому "справжньому" вікні, ви повинні ввести додатковий параметр. Подібно до:

window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');

Після тестування здається, що додатковий параметр, який ви використовуєте, не має насправді значення: це не факт, що ви ставите "цей параметр" або "цей інший", який створює нове "реальне вікно", а факт, що є новий параметр (s ).

Але щось плутається і може пояснити багато неправильних відповідей:

Це:

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');

І це:

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');

НЕ дасть однакового результату.

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

У другому випадку, коли ваш перший дзвінок здійснюється з додатковим параметром, сторінка буде відкрита в новому " реальному вікні ". І в цьому випадку, навіть якщо другий дзвінок буде здійснено без додаткового параметра, він також буде відкритий у цьому новому " реальному вікні " ... але в тій же вкладці!

Це означає, що перший дзвінок важливий, оскільки він вирішив, де розмістити сторінку.


У цій відповіді має бути багато ++++
Мітч ВанДюйн

9

Вам не потрібно. Дозвольте користувачеві мати будь-які уподобання.

Firefox робить це за замовчуванням, тому що відкриття сторінки в новому вікні дратує, і сторінку ніколи не можна дозволяти робити, якщо це не те, що бажає користувач. (Firefox дозволяє відкривати вкладки в новому вікні, якщо ви його встановите таким чином).


31
ви так помиляєтесь і, до речі, сказати "вам не слід" не підходить, особливо якщо це те, чого хоче начальник

8
Дозвольте спробувати і зберегти коментарі практичними та корисними. Ми можемо не погодитися, не ображаючи.
adam

17
@theman_on_vista: Переконати свого шефа - це ваша відповідальність. Ваша компанія покладає на вас відповідальність за вирішення проблем із дизайном. Це включає вказівку на неправильні ідеї дизайну.
EFraim

2
Такий справжній. Екран належить користувачеві, і нікому більше.
Крістофер Крейціг

12
Саме у царині дизайнера слід вибрати спливаюче вікно чи вкладку. Хоча я користувач, який завжди віддає перевагу вкладкам, я розумію, що іноді дизайн дійсно вимагає спливаючого вікна або дійсно вимагає вкладки. Це має бути у царині програміста, щоб зробити це можливим. Не відкладаючи філософські відмінності, такий коментар є абсолютно невідповідним для довідкового сайту програмування. І в цьому випадку це не "я повинен?" питання. Це "як мені?"
jbenet

9

Ви можете спробувати наступну функцію:

<script type="text/javascript">
function open(url)
{
  var popup = window.open(url, "_blank", "width=200, height=200") ;
  popup.location = URL;
}
</script>

HTML-код для виконання:

<a href="#" onclick="open('http://www.google.com')">google search</a>

2
Яка мета роботи popup.location = URL;? window.open()Виклик повинен відкрити його в відповідний URL, і в вашому прикладі коду, URLне визначений , так що буде падати назад до експериментальних (і не широко підтримка) об'єкта URL . Хоча використовувати його для того, що є дискусійним, мені цікаво, які мотиви для його використання тут?
кен

Справжня відповідь і навчила мене робити те, що розташування не можна редагувати. дякую
VirtualProdigy

6

Ключовими є параметри:

Якщо ви надаєте Параметри [Висота = "", Ширина = ""], він відкриється в нових вікнах.

Якщо ви не надаєте Параметри, він відкриється в новій вкладці.

Тестували в Chrome і Firefox


1
newwin = window.open ('test.aspx', '', ''); перевірено в Chrome: 26
MuniR

5

Цікаво, що я виявив, що якщо ви перейдете в порожню рядок (на відміну від нульової рядка або списку властивостей) для третього атрибуту window.open, він відкриється в новій вкладці для Chrome, Firefox та IE. Якщо вона відсутня, поведінка була іншою.

Отже, це мій новий дзвінок:

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

Чи не оригінальний плакат намагається відкрити спливаючі вікна у новому вікні? Також у IE 11 фрагмент коду, який ви надали, відкриє нове вікно або вкладку на основі налаштувань браузера користувача.

4

спробуйте цей метод .....

function popitup(url) {
       //alert(url);
       newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
       newwindow.moveTo(350,150);
   if (window.focus) 
          {
             newwindow.focus()
          }
   return false;
  }

3

Для мене рішення було мати

"location=0"

у 3-му параметрі. Тестовано на останньому FF / Chrome та старій версії IE11

Повний дзвінок методу, який я використовую, наведений нижче (Оскільки я люблю використовувати змінну ширину):

window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');

2

Я просто спробував це з IE (11) та Chrome (54.0.2794.1 канар SyzyASan):

window.open(url, "_blank", "x=y")

... і воно відкрилося в новому вікні.

Що означає, що Клінт pachl мав це право, коли сказав, що надання будь-якого одного параметра призведе до відкриття нового вікна.

- і, мабуть, це не повинно бути законним параметром!

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

ЕТА: Хоча я щойно помітив - у IE на вікні немає прикрас.


1

Відповіли тут . Але розміщуємо його знову для довідки.

window.open()не відкриється в новій вкладці, якщо це не відбувається в реальній події клацання. У наведеному прикладі URL відкривається для фактичної події натискання. Це буде працювати за умови, що користувач має відповідні налаштування в браузері.

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

Аналогічно, якщо ви намагаєтеся робити дзвінок в Ajax у межах функції клацання і хочете відкрити вікно про успіх, переконайтеся, що ви здійснюєте виклик Ajax з async : falseнабором опцій.


1

Я думаю, що проблема не з цільовими властивостями html, але ви зняли прапорець "відкрити нові вікна на новій вкладці" замість "опцію на вкладці" вкладку "в меню" Параметри "Firefox. перевірте це та спробуйте ще раз.

введіть тут опис зображення


0

У мене було те саме питання, але я знайшов відносно просте його рішення.

У JavaScript я перевіряв, window.opener !=null;щоб визначити, чи не з'явилося вікно. Якщо ви використовуєте якийсь подібний код виявлення, щоб визначити, чи відображається вікно, на яке ви розміщуєте веб-сайт, ви можете легко "вимкнути його", коли ви хочете відкрити "нове" вікно за допомогою нового вікна JavaScript.

Просто поставте це вгорі сторінки, де ви хочете, щоб завжди було "нове" вікно.

<script type="text/javascript">
    window.opener=null;
</script>

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

Ви навіть можете створити просту сторінку переспрямування, яка це робить, а потім переміщується до вказаної вами URL-адреси. Щось на зразок,

JavaScript на батьківській сторінці:

window.open("MyRedirect.html?URL="+URL, "_blank");

А потім, скориставшись трохи JavaScript, звідси ви можете отримати URL-адресу та переспрямувати її.

JavaScript на сторінці перенаправлення:

 <script type="text/javascript">
        window.opener=null;

    function getSearchParameters() {
          var prmstr = window.location.search.substr(1);
          return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
    }

    function transformToAssocArray( prmstr ) {
        var params = {};
        var prmarr = prmstr.split("&");
        for ( var i = 0; i < prmarr.length; i++) {
            var tmparr = prmarr[i].split("=");
            params[tmparr[0]] = tmparr[1];
        }
        return params;
    }

    var params = getSearchParameters();
    window.location = params.URL;
    </script>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.