Програмно відкривати нові сторінки на вкладках


98

Я намагаюся «змусити» Safari або IE7 відкрити нову сторінку за допомогою нової вкладки .

Я програмно маю на увазі щось на кшталт:

window.open('page.html','newtaborsomething');

1
Я не впевнений, що я зрозумів, що ви розробляєте додаток, який працює з IE і хочете відкривати кожну нову сторінку на новій вкладці? Або ви просто хочете налаштувати IE, щоб відкрити нову вкладку, натиснувши на посилання? Або ви створюєте будь-який веб-сайт із більшою кількістю посилань і хочете, щоб вони відкривалися окремо? Pls зробити це чіткіше.
Данджео

Дякую за всі ваші коментарі та відповіді, я знаю, що це не велика справа і не повинно бути проблемою в моєму розвитку, але це запит клієнта, а не важливий, який я просто хотів знати. Проблема полягає в тому, що IE7 і Safari не відкриють спливаюче вікно з вкладкою, використовуючи JavaScript або цільовий атрибут, правда?
Рікардо Вега

Відповіді:


63

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

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


Коли вибирається параметр "Нехай Internet Explorer вирішує, як відкрити спливаючі вікна", які критерії використовує Internet Explorer для прийняття цього рішення?
Dead.Rabit

113

Ви можете у Firefox, що він працює, додати атрибут target = "_ newtab" до якоря, щоб примусити відкрити нову вкладку.

<a href="some url" target="_newtab">content of the anchor</a>

У JavaScript ви можете використовувати

window.open('page.html','_newtab');

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

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

Редагувати: додано посилання на ie7 Можливо, це посилання може бути корисним
http://social.msdn.microsoft.com/forums/en-US/ieextensiondevelopment/thread/951b04e4-db0d-4789-ac51-82599dc60405/


6
Дякую за цю пораду Firefox, тепер я оновив свій додаток TargetKiller, щоб видалити "_newtab" та "newtab". : P
thenonhacker

1
Я дуже ціную вашу відповідь, але я знаю, що Firefox це зробить (деякі тексти, не перевірені мною, зауважують, що це не завжди так, є 50-50 шансів отримати нове вікно чи вкладку). Я також вважаю, що це не повинно бути проблемою, але, ви знаєте клієнтів :)
Рікардо Вега

2
Це може бути не у всіх збірках / платформах, але Firefox 3.5 в Linux не дозволяє вам робити це не один раз ... якщо на вашій сторінці є кілька посилань target = "_ newtab", натиснувши будь-яку з них буде заповнено лише одну нову вкладку ... тобто наступні клацання замінять все, що було відкрито раніше на цій вкладці. Змушує мене думати, що це фактично відкриття вкладки під назвою "_newtab", а не обхідного способу, який стосується браузера.
Райлі Коррадіні

55
Я впевнений, що "_newtab" є безглуздим, якщо хтось не має документації, яка суперечить. Все, що ви робите, - це відкрити вікно з ім'ям _newtab (тому всі наступні посилання з цією ціллю відкриваються в одному вікні). Ви можете орієнтуватися на "foo" або "bar" і бачити однакову поведінку. Єдині добре відомі цілі - _blank, _self, _parent і _top. htmlcodetutorial.com/linking/_A_TARGET.html
Tom Lianza

43

Ті, хто намагається використовувати наступне:

window.open('page.html', '_newtab');

дійсно слід подивитися на метод window.open.

Все, що ви робите, - це наказати браузеру відкрити нове вікно "ІМЕНЕНО" _newtab "та завантажити сторінку.html у нього. Кожна нова сторінка, яку ви завантажуєте, завантажиться у це вікно. Однак якщо у користувача встановлений браузер для відкриття нових сторінок на нових вкладках замість нових вікон, він відкриє вкладку. Незважаючи на це, воно використовує те саме ім’я для вікна або вкладки.

Якщо ви хочете, щоб різні сторінки відкривались у різних вікнах чи вкладках, вам доведеться змінити ІМЕНЬ нового вікна / вкладки на щось інше, наприклад:

window.open('page2.html', '_newtab2');

Звичайно, ім'ям нового вікна / вкладки може бути будь-яке ім’я, наприклад page1, page2, page3 тощо, а не _newtab2.


3
знає його речі. '_newtab' - це не зарезервоване ім'я. "_blank" - це особлива річ, яка відкриває ще одне невизначене та неназване вікно / вкладку - це ви можете продовжувати використовувати знову і знову. "_newtab" не є особливим, за винятком того, що це конкретне ім'я, якому ви дали нову вкладку (за замовчуванням) або вікно, яке ваш браузер постійно оновлює будь-якою URL-адресою, яку ви йому надіслали.
BradChesney79

14

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

Моя домашня тварина - я ненавиджу це, коли сайти змушують мене відкриватися в новому вікні / вкладці - я цілком здатний прийняти це рішення для себе. Особливо, коли вони роблять це в JavaScript - це справді не корисно.


1
+1 до Саму - нові сторінки, що відкриваються у вкладках чи вікнах, - це вибір конкретного веб-переглядача (і користувача). Взагалі я ненавиджу це, коли будь-який сайт відкриває нове вікно.
Річард Єв

На додаток до цього: У "суворому" визначенні немає дійсного атрибута "target" через те, що не дратує користувача. Спробуйте: validator.w3.org
guerda

4
Мені подобається відкривати партії вкладок вдома, тому я є користувачем у такому випадку. Просто нагадування, що є винятки.
Марк Ессел

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

1
Я не згоден, якщо припустити, що типовим для користувача є вибір дизайну для веб-програми, а не для браузера. Браузер може передплатити за замовчуванням, якщо програма не робить. Крім того, якщо браузери надають користувачеві спосіб змінити параметри за замовчуванням програми / налаштування за замовчуванням, то це найкраще з обох світів. Користувач> Додаток> Браузер.
Дерек Ліц

8

Ви вже намагалися, як

var open_link = window.open('','_blank');
open_link.location="somepage.html";

Чи сумісний цей крос-браузер? Здається, працює в IE8, переживає за майбутні версії чи інші браузери.
n00b

Так .. це сумісно для перехресного браузера. У мене до цього часу проблем не було: D
Thurein Soe

5

Я дізнався в Chrome,

window.open('page.html','_newtab')

буде працювати лише один раз.

Ви можете використовувати:

window.open(ct.getNewHref(),'_newtab' + Math.floor(Math.random()*999999));

Щоб відкрити кілька нових вкладок.


10
це тому, що в Chrome, _newtab - це лише ім'я, і ​​ви просите його відкрити сторінку на вкладці "_newtab"
w00t

3

Код, який я використовую у jQuery:

$("a.btn_external").click(function() {
    url_to_open = $(this).attr("href");
    window.open(url_to_open, '_blank');
    return false;
});

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


8
Чому б просто не використовувати звичайний старий html? <a href="page.html" target="_blank">foo</a>
пікселівка

1
@pixelastic "Використовуючи цей метод, ви не запускаєте події клацання батьків".
Майкл Блекберн


0

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

jQuery('<a/>', {
    id: 'foo',
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!',
    target:'_blank',
    style:'display:none;'
}).appendTo('#mySelector');

$('#foo').click()

чи можете ви надати jsfiddle?
Ксенологія

-2

Це може спрацювати, якщо ви можете викликати пакетний файл (я використовую php з XP sp2 та IE8 ... ви можете спробувати IE7, не знаю). Використовуйте наступне (або подібне) у вашому файлі .bat, щоб відкрити Windows: Запустіть "" C: \ Progra ~ 1 \ Intern ~ 1 \ iexplore "http://www.site.com". Між лапкою і C: \ Progr ... і т. Д. Немає пробілу. У якийсь момент це може почати відкривати нові вікна (тобто, target = "_ blank"), а не нові вкладки, але працює до точки; недостатньо перевірений. Щоб використовувати це у звичайному пакетному файлі (CMD.exe), вам, ймовірно, потрібно відкрити вікно. Просто ділитися чимось, на що я натрапив. ЗДОРОВИЛ для уточнення.


-7
<a href="http://www.google.com/" target="_self">New Tab Example</a>

Працює в IE7.

З повагою,

Гленн


8
Гленн, це протилежне тому, що просила ОП. _ сам відкриє документ у тому ж вікні чи кадрі.
travega

Також це не спосіб відкрити програмно. Сюрприз полягає в тому, що з цією відповіддю набирає +10 повторень (+ 3 / -10).
vusan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.