Я использую несколько переменных состояния, чтобы определить, какие сайты следует открывать на новых вкладках (или, возможно, в новом окне, если вкладки невозможны) одним нажатием кнопки. Однако window.open () открывает только первую ссылку.
В этом коде я попытался нажать целевые сайты на массив и запустить .forEach и .map для элементов массива.
open_selected_websites() {
const sites_to_open = [];
// check each property for true and array.push if so
this.final_social_media_site_selections.facebook && sites_to_open.push('http://facebook.com');
this.final_social_media_site_selections.twitter && sites_to_open.push('http://twitter.com');
this.final_social_media_site_selections.linkedin && sites_to_open.push('http://linkedin.com');
this.final_social_media_site_selections.instagram && sites_to_open.push('http://instagram.com');
this.final_social_media_site_selections.pinterest && sites_to_open.push('http://pinterest.com');
console.log(sites_to_open); // all observables are true and all sites appear in the array.
sites_to_open.forEach((social_media_site) => {
// setTimeout(() => {
window.open(social_media_site);
// }, 500)
})
В обоих случаях facebook загружается на новую вкладку. Это первый элемент массива.
Затем я попытался добавить setTimeout, чтобы увидеть, может ли какое-то время коснуться вещей. Нет, еще только Facebook.
Затем я попытался проверить только один сайт в каждой функции:
<Button
size='huge'
color='orange'
onClick={ () => {
// final_edits_store.open_selected_websites();
final_edits_store.test_to_open_twitter();
final_edits_store.test_to_open_facebook();
} }
>
Copy Text and Open Social Media Sites in New Tabs
</Button>
В этом случае Twitter открылся. Функция twitter была указана первыми.
Кто-нибудь знает, что вызывает window.open (), чтобы не срабатывать несколько раз? И как преодолеть этот предел?
Вы не можете.
Браузеры разрешают запуск только одного окна из заданного взаимодействия с пользователем.
Это функция безопасности, которая запрещает веб-сайтам бомбить пользователя огромным количеством новых окон.
jsFiddle здесь - https://jsfiddle.net/523bLxf4/12/
Попробуйте параметр name, который принимает window.open.
Вместо window.open(social_media_site); попробуйте window.open(social_media_site, social_media_site);
В параметре name используйте тег, который однозначно идентифицирует окно.