Программно открывать новые страницы на вкладках

99

Я пытаюсь заставить Safari или IE7 открыть новую страницу с новой вкладки .

Программно я имею в виду что-то вроде:

window.open('page.html','newtaborsomething');
Рикардо Вега
источник
1
Я не уверен, что понимаю суть дела - вы разрабатываете приложение, которое работает с IE, и хотите открывать каждую новую страницу на новой вкладке? Или вы просто хотите настроить IE, чтобы открывать новую вкладку при нажатии на ссылку? Или вы создаете сайт с большим количеством ссылок и хотите, чтобы они открывались отдельно? Пожалуйста, сделайте это яснее.
Dungeo,
Спасибо за все ваши комментарии и ответы, я знаю, что это не имеет большого значения и не должно быть проблемой в моей разработке, но это запрос клиента, а не важный, который я просто хотел знать. Проблема в том, что IE7 и Safari не открывают всплывающее окно с вкладкой, использующей javascript или целевой атрибут, правда?
Рикардо Вега,

Ответы:

63

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

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

Thenonhacker
источник
Когда выбран параметр «Разрешить 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 09
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
44

Те из вас, кто пытается использовать следующее:

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

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

Все, что вы делаете, - это указываете браузеру открыть новое окно, НАЗВАННОЕ «_newtab», и загрузить в него page.html. Каждая новая страница, которую вы загружаете, будет загружаться в это окно. Однако, если в браузере пользователя настроено открытие новых страниц в новых вкладках, а не в новых окнах, вкладка откроется. В любом случае, для окна или вкладки используется одно и то же имя.

Если вы хотите, чтобы разные страницы открывались в разных окнах или вкладках, вам придется изменить ИМЯ нового окна / вкладки на другое, например:

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

Конечно, имя нового окна / вкладки может быть любым, например, page1, page2, page3 и т. Д. Вместо _newtab2.

Боб Линдабери
источник
3
знает свое дело. _newtab не является зарезервированным именем. _blank - это особая функция, которая открывает еще одно неуказанное и безымянное окно / вкладку, которую вы можете использовать снова и снова. «_newtab» не является чем-то особенным, за исключением того, что это конкретное имя, которое вы дали новой вкладке (по умолчанию) или окну, которое ваш браузер постоянно обновляет с любым URL-адресом, который вы ему отправляете.
BradChesney79
15

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

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

Сэм Мелдрам
источник
1
+1 к Сэму - открытие новых страниц во вкладках или окнах - это выбор браузера (и пользователя). Вообще ненавижу, когда любой сайт открывает новое окно.
Ричард Эв,
Вдобавок к этому: в "строгом" определении нет действительного атрибута "target", потому что он не раздражает пользователя. Попробуйте: validator.W3.org
guerda
4
Мне нравится открывать группы вкладок дома, поэтому в этом случае я являюсь пользователем. Напоминаем, что бывают исключения.
Марк Эссель
7
Хотя я согласен, что когда сайты навязывают действия, это может раздражать, но я думаю, что это немного бесполезно, если просто заявить, что вы не должны что-то делать, не учитывая причины, по которым кто-то может захотеть это сделать. Сайты часто открывают элементы в новых вкладках, особенно ссылки на внешние сайты, или когда нецелесообразно заменять активную страницу новым контентом, поэтому это не совсем неожиданное поведение. Я бы также предположил, что это не совсем ответ на вопрос, и его лучше было бы использовать в качестве комментария к исходному сообщению.
andyface
1
Я не согласен, предполагая, что значение по умолчанию для пользователя - это выбор дизайна для каждого веб-приложения, а не для каждого браузера. Браузер может подписаться на подписку по умолчанию, в то время как приложение этого не делает. Кроме того, если браузеры предоставляют пользователю возможность переопределить значения по умолчанию приложения / настройки браузера по умолчанию, то это лучшее из обоих миров. Пользователь> Приложение> Браузер.
Derek Litz
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;
});

Это полезно, чтобы различать события щелчка родительского элемента в дочернем элементе. Используя этот метод, вы не запускаете родительское событие click.

Lacroixca
источник
8
Почему бы просто не использовать старый добрый HTML? <a href="page.html" target="_blank">foo</a>
pixelastic 09
1
@pixelastic «Используя этот метод, вы не запускаете родительское событие щелчка».
Майкл Блэкберн
3

Это работает на 100%

window.open('http://www.google.com/','_newtab' + Date.now());

Кевин Мухват
источник
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?
Xenology
-2

Это может сработать, если вы можете вызвать командный файл (я использую php с XP sp2 и IE8 ... вы можете попробовать IE7, не знаю). Используйте следующее (или подобное) в вашем .bat файле, чтобы открыть Windows: Пуск "" C: \ Progra ~ 1 \ Intern ~ 1 \ iexplore "http://www.site.com". Между кавычкой и C: \ Progr ... и т. Д. Нет пробела. В какой-то момент это может начать открывать новые окна (например, target = "_ blank"), а не новые вкладки, но работает до определенного момента; не тщательно протестирован. Чтобы использовать это в обычном пакетном файле (CMD.exe), вам, вероятно, нужно, чтобы окно уже было открыто. Просто поделился тем, на что наткнулся. ИЗМЕНИТЬ для пояснения.

River_mouse
источник
-7
<a href="http://www.google.com/" target="_self">New Tab Example</a>

Работает в IE7.

С Уважением,

Гленн

Гленн Мур
источник
8
Гленн, это противоположность тому, о чем просил ОП. _self откроет документ в том же окне или фрейме.
Travega
Также это не способ открываться программным способом. Удивительно, как с этим ответом он получает +10 повторений (+ 3 / -10).
vusan