Мне нравится расширение Google Chrome, и я просто хочу знать, как сохранить URL-адрес текущей вкладки в переменной?
Как я могу получить URL-адрес текущей вкладки из расширения Google Chrome?
Ответы (8)
Используйте chrome.tabs.query()
так:
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
let url = tabs[0].url;
// use `url` here inside the callback because it's asynchronous!
});
Для этого необходимо запросить доступ к chrome.tabs
API в вашем манифесте расширения:
"permissions": [ ...
"tabs"
]
Важно отметить, что определение вашей «текущей вкладки» может отличаться в зависимости от потребностей вашего расширения.
Установка lastFocusedWindow: true
в запросе подходит, если вы хотите получить доступ к текущей вкладке в окне, ориентированном на пользователя (обычно в самом верхнем окне).
Установка currentWindow: true
позволяет вам получить текущую вкладку в окне, в котором в настоящее время выполняется код вашего расширения. Например, это может быть полезно, если ваше расширение создает новое окно / всплывающее окно (меняет фокус), но все же хочет получить доступ к информации вкладки из окна, в котором было запущено расширение.
Я решил использовать lastFocusedWindow: true
в этом примере, потому что Google указывает случаи, в которых currentWindow
не всегда может быть присутствует.
Вы можете дополнительно уточнить свой запрос вкладки, используя любое из свойств, определенных здесь: chrome.tabs. запрос
async/await
.
- person Camilo; 25.11.2020
permissions: ['activeTab']
тоже работает
- person Sodj; 09.04.2021
Внимание! chrome.tabs.getSelected
устарел. Пожалуйста, используйте chrome.tabs.query
, как показано в других ответах.
Во-первых, вы должны установить разрешения для API в manifest.json:
"permissions": [
"tabs"
]
И чтобы сохранить URL:
chrome.tabs.getSelected(null,function(tab) {
var tablink = tab.url;
});
chrome.tabs.getSelected
не определено, можно задать отдельный вопрос?
- person Mostafa Shahverdy; 21.03.2013
chrome.tabs.getSelected
устарел, правильный метод указан в ответ ниже.
- person Rob W; 29.06.2013
main.js
, есть какие-нибудь указания?
- person Tahir Yasin; 18.10.2015
Другие ответы предполагают, что вы хотите узнать это из всплывающего или фонового сценария.
Если вы хотите узнать текущий URL из сценария содержимого, применяется стандартный способ JS:
window.location.toString()
Вы можете использовать свойства window.location
для доступа к отдельным частям URL, таким как хост, протокол или путь.
window.location.host
посмотреть, нахожусь ли я в stackoverflow.com или нет.
- person Salyangoz; 07.09.2017
match:"<all_urls>"
ситуация в разделе content_script, и Chrome не рекомендуется ‹all_urls›.
- person mcan; 07.11.2018
contentScript.js
, а не в background.js
. Просто передайте все данные, которые вы отфильтровали из URL-адреса, в сообщение background.js
. Пример: let message = { type: "fetchVideoDate", id: getVideoId() };
, где getVideoId()
содержит выполнение window.location.toString()
. В противном случае вы получите chrome://temp_background_file.html
данные. Также обратите внимание, что иногда message
называется request
.
- person DavidHulsman; 29.04.2019
Проблема в том, что chrome.tabs.getSelected является асинхронным. Приведенный ниже код обычно не работает должным образом. Значение 'tablink' по-прежнему будет неопределенным, когда оно будет записано в консоль, потому что getSelected еще не вызвал обратный вызов, который сбрасывает значение:
var tablink;
chrome.tabs.getSelected(null,function(tab) {
tablink = tab.url;
});
console.log(tablink);
Решение состоит в том, чтобы обернуть код, в котором вы будете использовать значение в функции, и вызвать ее с помощью getSelected. Таким образом, вы гарантированно всегда будете иметь установленное значение, потому что вашему коду придется ждать, пока значение не будет предоставлено, прежде чем оно будет выполнено.
Попробуйте что-нибудь вроде:
chrome.tabs.getSelected(null, function(tab) {
myFunction(tab.url);
});
function myFunction(tablink) {
// do stuff here
console.log(tablink);
}
Привет, вот образец Google Chrome, который отправляет другу по электронной почте текущий сайт. Основная идея - это то, что вы хотите ... сначала он извлекает содержимое страницы (не интересует вас) ... затем получает URL-адрес (‹- хорошая часть)
Кроме того, это хороший пример рабочего кода, который я предпочитаю читать документам.
Можно найти здесь: Отправить эту страницу по электронной почте
Это решение уже ПРОВЕРЕНО.
установить разрешения для API в manifest.json
"permissions": [ ...
"tabs",
"activeTab",
"<all_urls>"
]
При первой загрузке функции вызова. https://developer.chrome.com/extensions/tabs#event-onActivated
chrome.tabs.onActivated.addListener((activeInfo) => {
sendCurrentUrl()
})
При изменении функции вызова. https://developer.chrome.com/extensions/tabs#event-onSelectionChanged
chrome.tabs.onSelectionChanged.addListener(() => {
sendCurrentUrl()
})
функция для получения URL
function sendCurrentUrl() {
chrome.tabs.getSelected(null, function(tab) {
var tablink = tab.url
console.log(tablink)
})
Для тех, кто использует context menu api
, в документации не сразу понятно, как получить информацию о вкладках.
chrome.contextMenus.onClicked.addListener(function(info, tab) {
console.log(info);
return console.log(tab);
});
https://developer.chrome.com/extensions/contextMenus.
Вы должны проверить это.
HTML
<button id="saveActionId"> Save </button>
manifest.json
"permissions": [
"activeTab",
"tabs"
]
JavaScript
Приведенный ниже код сохранит все URL-адреса активного окна в объект JSON при нажатии кнопки.
var saveActionButton = document.getElementById('saveActionId');
saveActionButton.addEventListener('click', function() {
myArray = [];
chrome.tabs.query({"currentWindow": true}, //{"windowId": targetWindow.id, "index": tabPosition});
function (array_of_Tabs) { //Tab tab
arrayLength = array_of_Tabs.length;
//alert(arrayLength);
for (var i = 0; i < arrayLength; i++) {
myArray.push(array_of_Tabs[i].url);
}
obj = JSON.parse(JSON.stringify(myArray));
});
}, false);