Откройте две новые вкладки из всплывающего окна. html и всплывающего окна. js - PullRequest
0 голосов
/ 28 марта 2020

У меня есть некоторый код, который позволяет пользователям устанавливать флажки и при отправке открывает URL-адреса, связанные с флажками в новых вкладках. Если установлены оба флажка, две вкладки открываются. Он работает как ожидалось и выглядит так:

document.getElementById('cbx').addEventListener(

    'submit', function checkForm(event) {
	
    //Prevents default action that would normally happen onsubmit
  	event.preventDefault();
    
    //Define the form element
    var form = document.getElementById("cbx");

    if (form.cb1.checked) {
        window.open('http://google.com/', '_blank');
    }
    if (form.cb2.checked) {
        window.open('http://yahoo.com/', '_blank');
    }

    return true;

});
<form id="cbx">
	
	<label for="cb1">G</label>
	<input name="cb1" type="checkbox">
	
	<label for="cb2">Y</label>
	<input name="cb2" type="checkbox">
	
	<input type="submit" value="Submit">
	
</form>

Теперь я хочу включить эту функцию в мое расширение Chrome:

  • часть HTML находится во всплывающем окне. html,
  • Javascript часть находится во всплывающем окне. js.

Проблема заключается в том, что если оба флажка отмечены только на одной первой cb1 вкладке с URL открыт.

Почему это так? Как мне добиться того, чтобы, если все флажки установлены, вкладки со всеми соответствующими URL стали открытыми?

1 Ответ

1 голос
/ 28 марта 2020

Открытие и фокусировка Новая вкладка автоматически закроет всплывающее окно.

Существует два решения:

  1. Открыть все вкладки, кроме первой один из них неактивен

    const urls = [
      form.cb1.checked && 'http://google.com/',
      form.cb2.checked && 'http://yahoo.com/',
    ].filter(Boolean);
    urls.reduceRight((_, url, index) => chrome.tabs.create({url, active: !index}), 0);
    
  2. Используйте фоновый скрипт : отправьте сообщение из всплывающего окна с URL-адресами, чтобы фоновый скрипт открыл их с помощью chrome. tabs.create. Это более надежно, поскольку другое расширение может активировать неактивную вкладку, открытую с помощью первого метода, закрывая, таким образом, всплывающее окно, которое может (или не может) произойти до создания второй вкладки.

...