Ответ 1
Ничего.
Оказывается, вы действительно можете использовать chrome.tabs.getSelected
непосредственно из всплывающего окна. Кто-то солгал. ¬¬
Я пишу расширение Chrome, и в одной его части мне нужно получить текущий заголовок и URL табуляции при нажатии кнопки на всплывающей странице.
Я работал с системой передачи сообщений Chrome раньше и, после долгих усилий, сумел заставить ее работать, во многих случаях. Тем не менее, мне никогда не приходилось использовать их со всплывающими страницами, и из того, что я читал, это гораздо труднее сделать.
Временная шкала, которую мне удалось выяснить до сих пор, такова:
popup.html
/popup.js
: Кнопка нажатаpopup.html
/popup.js
: Запрос/сообщение отправляется на контент scriptcontentScript.js
: Запрос/сообщение получено со всплывающей подсказкиcontentScript.js
: Заголовок и URL текущей вкладки хранятся в переменнойcontentScript.js
: 2 переменные отправляются как стробированный ответpopup.html
/popup.js
: 2 переменные анализируются из ответаОбычно я мог бы это понять, но я прочитал несколько вещей, которые запустили гаечный ключ в работе, например:
chrome.tabs.getSelected
может использоваться только на исходной странице / script. Означает ли это, что скрипты содержимого вообще не нужно использовать?Я уже нашел систему передачи сообщений Chrome довольно сложно, но это меня полностью смутило. Следовательно, этот пост.
Ничего.
Оказывается, вы действительно можете использовать chrome.tabs.getSelected
непосредственно из всплывающего окна. Кто-то солгал. ¬¬
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);