React.js: Как запустить window.open () несколько раз подряд?

Я использую несколько переменных состояния, чтобы определить, какие сайты следует открывать на новых вкладках (или, возможно, в новом окне, если вкладки невозможны) одним нажатием кнопки. Однако 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 (), чтобы не срабатывать несколько раз? И как преодолеть этот предел?

0
задан 13 August 2018 в 14:14

2 ответа

Вы не можете.

Браузеры разрешают запуск только одного окна из заданного взаимодействия с пользователем.

Это функция безопасности, которая запрещает веб-сайтам бомбить пользователя огромным количеством новых окон.

1
ответ дан 15 August 2018 в 17:03
  • 1
    Ты уверен? Мне удалось открыть два окна. jsfiddle.net/523bLxf4/4 (PS: К сожалению, он автоматически открывает две вкладки) – xadhix 13 August 2018 в 15:06
  • 2
    @xadhix - Когда я проверяю этот код, он не открывается (потому что вы не запускаете его из любого пользовательского события). – Quentin 13 August 2018 в 15:07
  • 3
    Проверьте блокировщик всплывающих окон. – xadhix 13 August 2018 в 15:10
  • 4
    @xadhix - Это стандартное поведение Chrome. – Quentin 13 August 2018 в 15:18
  • 5
    Я переместил window.open на обработчик onClick. До сих пор работает. Смотрите это - jsfiddle.net/523bLxf4/12 У вас есть jsFiddle, где он не работает? – xadhix 13 August 2018 в 15:26

jsFiddle здесь - https://jsfiddle.net/523bLxf4/12/

Попробуйте параметр name, который принимает window.open.

Вместо window.open(social_media_site); попробуйте window.open(social_media_site, social_media_site);

В параметре name используйте тег, который однозначно идентифицирует окно.

-1
ответ дан 15 August 2018 в 17:03
  • 1
    Дарн, попробовал, но это не сработало. Я использую Chrome 68. `sites_to_open.forEach ((social_media_site) = & gt; {window.open (social_media_site, social_media_site);})` – Sean Dezoysa 13 August 2018 в 15:07
  • 2
    @SeanDezoysa Обновленная скрипка – xadhix 13 August 2018 в 15:08
  • 3
    @SeanDezoysa У вас есть jsFiddle, где он не работает? работает в шахте. Даже при нажатии кнопки - jsfiddle.net/523bLxf4/12 – xadhix 13 August 2018 в 15:27
  • 4
    Я не. Я попробовал ваш код, и он открыл только Facebook. «Всплывающий блок заблокирован». было показано, хотя, и он сказал, что twitter.com был заблокированным пунктом назначения. Итак, теперь я рассмотрю это. – Sean Dezoysa 13 August 2018 в 15:50

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

Похожие вопросы: