Почему это окно не открывается после его закрытия (расширение Chrome)?

#javascript #html #google-chrome #web

#javascript #HTML #google-chrome #веб

Вопрос:

Итак, я создаю простое расширение Chrome и имею дело с всплывающими окнами. Когда пользователь устанавливает или активирует расширение, должно появиться всплывающее окно с инструкциями, после чего пользователь может нажать одну из трех кнопок: «Готово», «Пропустить», «Готово».

У меня проблема с кнопкой «Пропустить»: когда пользователь нажимает на нее, она должна «сообщить» фоновому скрипту, что был нажат пропуск, затем закрыть себя (окно, в котором находятся кнопки), затем фоновый скрипт откроет НОВОЕ окно, такое же, как и предыдущеено с разными данными / информацией в нем. Теперь пользователь снова может выбирать между тремя кнопками, и цикл начинается. Проблема: если я нажму на кнопку Пропустить несколько (2-3-4 раза) раз, новое окно не откроется, иногда, даже если я нажму только один раз, окно закроется и не откроет новое.

Соответствующий код: background.js (это инициализирует всплывающее окно и получает из него данные):

 window.open("notification.html", currentEx, 
"width=300,height=400,status=no,scrollbars=yes,resizable=no");

chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
    console.log("received "   msg.button);

    if(msg.button == "done"){
        console.log("done");
    }else if(msg.button == "skip"){
        randEx = Math.floor((Math.random() * 5));
        currentEx = something[randEx];
        console.log(currentEx);
        // currentEx is the data I want to access from the popup window that's why it is the name of the window

        var newWindow = window.open("notification.html", currentEx, 
        "width=300,height=400,status=no,scrollbars=yes,resizable=no");
    }else if(msg.button == "finish"){
        console.log("finish");
    }
});
  

notification.js (всплывающее окно, которое открывается, когда расширение активировано или пользователь нажимает на пропуск):

 var btnSkip = document.createElement("button");   
btnSkip.innerHTML = "Skip";  
btnSkip.onclick = function(){
    chrome.runtime.sendMessage({
        button: 'skip'
    }, function(){
        window.close();
    });
};                  
document.body.appendChild(btnSkip);  
  

Я просто не понимаю, почему всплывающее окно не открывается после 2 «Пропуска», а иногда и более щелчков. Оно должно закрываться и открываться независимо от того, сколько раз я это делаю, верно? Я не могу понять, в чем проблема, может быть, слушатель ошибается?

Комментарии:

1. Я решил это: если window.name совпадает с именем закрытого окна, тогда javascript не откроет окно (возможно, из-за дублирования имени). Я решил это с помощью window.custom_field для передачи информации, и я использую Date.now() в качестве имени окна, поэтому оно каждый раз разное. Я не знаю, должен ли я удалить этот вопрос, потому что я думаю, что у других может быть такая же проблема, но если модератор считает, что это бесполезный вопрос, не стесняйтесь его удалять. Я просто не мог легко найти такую информацию, поэтому я думаю, что оставлю этот вопрос.

2. Если у вас есть решение, укажите его в качестве ответа (даже если это ваш собственный вопрос) и отметьте его принятым.

3. Спасибо, что указали на это, я это сделаю.

Ответ №1:

Если window.name совпадает с именем закрытого окна, тогда javascript не откроет окно (возможно, из-за дублирования имени). Я решил это с помощью window.custom_field для передачи информации, и я использую Date.now() в качестве имени окна, поэтому оно каждый раз разное.