Ответы:
Используйте 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.tabsAPI в вашем манифесте расширения :
"permissions": [ ...
"tabs"
]
Важно отметить, что определение вашей «текущей вкладки» может отличаться в зависимости от потребностей вашего расширения.
Настройка lastFocusedWindow: trueв запросе подходит, когда вы хотите получить доступ к текущей вкладке в окне, ориентированном на пользователя (обычно это самое верхнее окно).
Настройка currentWindow: trueпозволяет вам получить текущую вкладку в окне, где в данный момент выполняется код вашего расширения. Например, это может быть полезно, если ваше расширение создает новое окно / всплывающее окно (изменяет фокус), но все же хочет получить доступ к информации вкладки из окна, в котором было запущено расширение.
Я решил использовать lastFocusedWindow: trueв этом примере, потому что Google вызывает случаи, в которых currentWindow не всегда могут присутствовать .
Вы можете дополнительно уточнить запрос табуляции, используя любое из свойств, определенных здесь: chrome.tabs.query
Предупреждение! 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не определена, я должен задать это в отдельном вопросе?
chrome.tabs.getSelectedМетод устарел, правильный метод указан в этом ниже ответ .
Другие ответы предполагают, что вы хотите узнать это из всплывающего или фонового скрипта.
Если вы хотите узнать текущий URL из скрипта контента , применяется стандартный способ JS:
window.location.toString()
Вы можете использовать свойства window.locationдля доступа к отдельным частям URL, таким как хост, протокол или путь.
window.location.hostэто посмотреть, нахожусь ли я на «stackoverflow.com» или нет.
match:"<all_urls>"ситуации в разделе content_script, и Chrome не рекомендует <all_urls>.
contentScript.jsа не в background.js. Просто передайте все данные, отфильтрованные по URL-адресу, в сообщение background.js. Пример: let message = { type: "fetchVideoDate", id: getVideoId() };где getVideoId()содержится исполнение window.location.toString(). В противном случае вы получите некоторые chrome://temp_background_file.htmlданные. Также обратите внимание, что иногда messageназывается request.
Проблема в том, что 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);
});
Вы должны проверить это .
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);