Відповіді:
Використовуйте 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 є асинхронним. Цей код нижче не працює як слід. Значення "табло" ще не буде визначеним, коли воно записується на консоль, оскільки 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-onActivate
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);