Відповіді:
Використовуйте 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.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);