Как получить URL текущей вкладки из расширения Google Chrome?

мне весело с расширением Google Chrome, и я просто хочу знать, как я могу сохранить URL текущей вкладки в переменной?

7 ответов


обновление: на chrome.tabs.getSelected() метод является теперь устаревшим.

рекомендуемый способ получения URL текущей вкладки-использовать chrome.tabs.query().

пример использования:

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
    var url = tabs[0].url;
});

это требует, чтобы вы запросили доступ к chrome.tabs API в вашем расширение манифеста:

"permissions": [ ...
   "tabs"
]

важно отметить, что определение вашей "текущей вкладки" может отличаться в зависимости от вашего расширение потребностей.

задание lastFocusedWindow: true в запросе подходит, когда вы хотите получить доступ к текущей вкладке в сфокусированном окне пользователя (как правило, самое верхнее окно).

задание currentWindow: true позволяет получить текущую вкладку в окне, где в настоящее время выполняется код вашего расширения. Например, это может быть полезно, если ваше расширение создает новое окно / всплывающее окно( изменение фокуса), но все же хочет получить доступ к информации вкладки из окна, где расширение было запущено.

я решил использовать lastFocusedWindow: true в этом примере, потому что Google называет случаи, в которых currentWindow может не всегда присутствовать.

вы можете дополнительно уточнить запрос вкладки, используя любое из свойств, определенных здесь:chrome.вешалки.запрос


друг отвечает на мой вопрос.

во-первых, вы должны установить разрешения для вкладки API:

"permissions": [
    "tabs"
]

и сохранить URL:

chrome.tabs.getSelected(null,function(tab) {
    var tablink = tab.url;
});

проблема в том, что chrome.вешалки.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);
}

другие ответы предполагают, что вы хотите знать его из всплывающего окна или фонового сценария.

в случае, если вы хотите знать текущий URL из скрипта контент, стандартный путь JS применяется:

window.location.toString()

Вы можете использовать свойства window.location для доступа к отдельным частям URL-адреса, таким как хост, протокол или путь.


привет вот пример Google Chrome, который отправляет текущий сайт другу. Основная идея заключается в том, чего вы хотите...прежде всего, он извлекает содержимое страницы (не интересует вас)...после этого он получает URL (

кроме того, это хороший пример рабочего кода, который я предпочитаю motstly над чтением документов.

можно найти здесь: отправить эту страницу


для тех, кто использует 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>

манифест.в 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);