Подтвердить что ты не робот

Расширение Chrome: получить текущую вкладку из всплывающего окна

Я пишу расширение Chrome, и в одной его части мне нужно получить текущий заголовок и URL табуляции при нажатии кнопки на всплывающей странице.

Я работал с системой передачи сообщений Chrome раньше и, после долгих усилий, сумел заставить ее работать, во многих случаях. Тем не менее, мне никогда не приходилось использовать их со всплывающими страницами, и из того, что я читал, это гораздо труднее сделать.

Временная шкала, которую мне удалось выяснить до сих пор, такова:

  • popup.html/popup.js:   Кнопка нажата
  • popup.html/popup.js:   Запрос/сообщение отправляется на контент script
  • contentScript.js:             Запрос/сообщение получено со всплывающей подсказки
  • contentScript.js:             Заголовок и URL текущей вкладки хранятся в переменной
  • contentScript.js:             2 переменные отправляются как стробированный ответ
  • popup.html/popup.js:   2 переменные анализируются из ответа

Обычно я мог бы это понять, но я прочитал несколько вещей, которые запустили гаечный ключ в работе, например:

  • chrome.tabs.getSelected может использоваться только на исходной странице / script. Означает ли это, что скрипты содержимого вообще не нужно использовать?
  • Сообщения не могут быть отправлены непосредственно из содержимого script на всплывающую страницу, они должны пройти через фоновый рисунок
  • Всплывающее окно должно быть подтверждено как существующее до того, как сообщение может быть передано ему (хотя, я думаю, я знаю, как это сделать)

Я уже нашел систему передачи сообщений Chrome довольно сложно, но это меня полностью смутило. Следовательно, этот пост.

4b9b3361

Ответ 1

Ничего.

Оказывается, вы действительно можете использовать chrome.tabs.getSelected непосредственно из всплывающего окна. Кто-то солгал. ¬¬

Ответ 2

chrome.tabs.getSelected устарел. Вместо этого следует использовать chrome.tabs.query.

chrome.tabs.query требуется два параметра: объект запроса и функция обратного вызова, которая принимает массив результирующих вкладок в качестве параметра.

Вы можете получить "текущую вкладку", запросив все активные вкладки, находящиеся в текущем окне.

var query = { active: true, currentWindow: true };

Так как запрос вернет массив Tab, содержащий только текущую вкладку, обязательно возьмите первый элемент в обратном вызове

function callback(tabs) {
  var currentTab = tabs[0]; // there will be only one in this array
  console.log(currentTab); // also has properties like currentTab.id
}

Et voilà:

chrome.tabs.query(query, callback);