Поведение window.open в chrome tabs/windows
У меня есть небольшой кусочек JavaScript, предназначенный для открытия двух или более вкладок. Это хорошо работает в FF и IE, но chrome открывает второе в новом окне вместо вкладки. Это не зависит от URL-адреса, как я пробовал с двумя одинаковыми URL-адресами. Первый открывается во вкладке, второй в новом окне.
Вот мой фрагмент кода:
for(var i=0 ; i<sites.length ;i++)
{
window.open(sites[i].Url);
}
2 ответа
Chrome автоматически открывает URL-адрес в новой вкладке, только если это пользовательское действие, ограниченное одной вкладкой на одно пользовательское действие. В любом другом случае URL будет открыт в новом окне (которое, кстати, по умолчанию заблокировано в Chrome).
window.open должен вызываться в обратном вызове, который запускается действием пользователя (например, onclick), чтобы страница открывалась в новой вкладке вместо окна.
В вашем примере вы пытаетесь открыть N вкладок после действий пользователя. Но только первая открывается в новой вкладке (потому что это действие, созданное пользователем). После этого любой другой URL будет открыт в новом окне.
Аналогичный вопрос: заставить window.open() создать новую вкладку в Chrome (см. Ответ по maclema)
Я сталкивался с этим вопросом. Что такое конструкция (function() { })() в JavaScript? который дает объяснение по IIFE. Я думаю, что это может быть использовано более. Пожалуйста, потерпите меня, у меня нет глубоких знаний о JavaScript. Но я попробовал, как показано ниже, и это работает.
var sites = [{"url" : "http://www.google.com"} , {"url" : "http://www.yahoo.com"} , {"url" : "http://www.msn.com"}];
console.log(sites);
for( var i=0 ; i < sites.length ;i++) {
(function(i) {
console.log(i);
window.open(sites[i].url , "_blank");
})(i);
}
Он открывает URL в новых вкладках в Chrome.