Поведение 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.

Другие вопросы по тегам