chrome.tabs.query
поддерживается на фоновых страницах, конечно, если у вас есть разрешение tabs
.Это поддерживаемый маршрут начиная с Chrome 19.
chrome.tabs.query({
active: true,
currentWindow: true
}, function(tabs) {
var tab = tabs[0];
var url = tab.url;
});
Обратите внимание, что currentWindow
необходим, потому что в противном случае он вернул бы активную вкладку для каждого окна.Это должно гарантировать только одну вкладку.
Конечно, имейте в виду, что это асинхронный API - вы не можете получить доступ к любым данным, которые он предоставляет, кроме как из функции обратного вызова.Вы можете хранить значения (например, url
здесь) в более широкой области видимости, чтобы другая функция могла получить к ней доступ, но это будет обеспечивать правильный результат только после выполнения обратного вызова.
(Ниже приведен мой первоначальный ответ, сохраненный для потомков - этот метод больше не нужен, требует постоянно работающей фоновой страницы, а getSelected()
устарел.)
Сначала поместите его в background.htmlи сделайте переменную myURL глобальной:
var myURL = "about:blank"; // A default url just in case below code doesn't work
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { // onUpdated should fire when the selected tab is changed or a link is clicked
chrome.tabs.getSelected(null, function(tab) {
myURL = tab.url;
});
});
Затем запустите ее в popup.html, когда вы хотите получить URL страницы:
chrome.extension.getBackgroundPage().myURL;
Так что если бы я сделал так, чтобы это появилось внутривсплывающее окно и я зашел в Google и нажал на вашу страницу или в браузере, я увижу http://google.com/webhp
во всплывающем окне.