#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() в качестве имени окна, поэтому оно каждый раз разное.