Я хочу создать расширение для автоматического входа на мои серверы. Поэтому я создал справочную страницу, чтобы проверить текущий URL-адрес, и если он соответствует моему URL-адресу, я покажу значок действия страницы. При нажатии на действие страницы я открываю всплывающее окно с некоторыми полями. Мне нужно получить открытый URL и заполнить его в одном из полей всплывающего окна (например, когда мы нажимаем на действие стандартной страницы закладок, URL-адрес автоматически заполняется всплывающим окном, который открывается). Как я могу сделать что-то подобное в chrome-расширениях? Я попытался передать сообщение с фоновой страницы во всплывающее html, но он не работает. Можно ли отправлять такие сообщения? Также я попытался установить onload для всплывающего html файла, но я заметил, что он не запускается. Пожалуйста, предложите подходящий метод для решения этого сценария.
Как получить открытый URL-адрес вкладки во всплывающем окне страницы?
Ответ 1
Используйте chrome.tabs.query
со следующими параметрами:
- объект queryInfo:
-
active: true
- Чтобы получить активную вкладку -
lastFocusedWindow: true
- Чтобы выбрать активное окно
-
- функция обратного вызова:
Эта функция получает один аргумент: массив совпадающих вкладок. Поскольку только одно окно может быть активным, и одна вкладка внутри этого окна, массив имеет только один элемент. Этот элемент является объектом сTab
сигнатурой.
Фрагмент кода:
// Do NOT forget that the method is ASYNCHRONOUS
chrome.tabs.query({
active: true, // Select active tabs
lastFocusedWindow: true // In the current window
}, function(array_of_Tabs) {
// Since there can only be one active tab in one active window,
// the array has only one element
var tab = array_of_Tabs[0];
// Example:
var url = tab.url;
// ... do something with url variable
});
Для этого достаточно разрешения activeTab
.
Ответ 2
Вы также можете использовать promises для более чистого способа получения вкладки:
getCurrentTab().then(function(tab){
// Do something w/tab
});
function getCurrentTab(){
return new Promise(function(resolve, reject){
chrome.tabs.query({
active: true, // Select active tabs
lastFocusedWindow: true // In the current window
}, function(tabs) {
resolve(tabs[0]);
});
});
}