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

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

Ответ 1

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

Сначала вы должны установить разрешения для API вкладок:

"permissions": [
    "tabs"
]

И сохранить URL-адрес:

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

Ответ 2

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

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

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

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

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

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

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

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

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

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

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

Ответ 3

Проблема заключается в том, что chrome.tabs.getSelected является асинхронным. Этот код ниже, как правило, не работает должным образом. Значение "tablink" по-прежнему будет undefined, когда оно будет записано в консоль, потому что 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);
}

Ответ 4

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

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

window.location.toString()

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

Ответ 5

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

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

Здесь можно найти: Отправить эту страницу по электронной почте

Ответ 6

Для тех, кто использует context menu api, документы не сразу понимают, как получить информацию о табе.

  chrome.contextMenus.onClicked.addListener(function(info, tab) {
    console.log(info);
    return console.log(tab);
  });

https://developer.chrome.com/extensions/contextMenus

Ответ 7

Вы должны проверить это.

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);