#javascript #google-chrome-extension #popup
#язык JavaScript #google-chrome-расширение #всплывающий
Вопрос:
У меня есть это расширение chrome с кнопкой browser_action. При нажатии на это действие браузера фоновый скрипт открывает всплывающее окно следующим образом
const popup = window.open('popup.html', tab.id, 'menubar=0,innerWidth=900,innerHeight=800');
Когда пользователь несколько раз нажимает на действие браузера, всплывающее окно каждый раз создается заново (у меня нет нескольких всплывающих окон).
Однако теперь я хотел бы заменить этот код, browser.windows.create
который, насколько я знаю, больше подходит для расширения. Поэтому я создал
browser.windows.create({url: 'popup.html', height: 800, width: 900, type: 'popup'});
Это работает почти одинаково, за исключением того, что, когда пользователь несколько раз нажимает кнопку действия браузера, я получаю несколько всплывающих окон, а это не то, что я хочу. Есть ли способ получить такое же поведение, как «window.open»?
Ответ №1:
Вот мое предложение (в машинописном виде):
function findTab(tab: chrome.tabs.Tab) { return tab.url == "popup.html"; } // first get all open chrome windows let windows = await chrome.windows.getAll({populate: true, windowTypes: ["popup"]}); // find a window that has a tab with the url "popup.html" let myWindow = windows.find(window =gt; window.tabs.some(tab =gt; findTab(tab))); // find a tab that has the url "popup.html" let myTab = myWindow?.tabs.find(tab =gt; findTab(tab)); if (myWindow amp;amp; myTab) { // if such tab exists, focus the parent window and the tab await chrome.windows.update(myWindow.id, {focused: true}); await chrome.tabs.update(myTab.id, {active: true}); } else { // open the window and the tab await chrome.windows.create({url: "popup.html", type: "popup"}); }
Комментарии:
1. Да, это работает. Большое спасибо!