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


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

7 135

7 ответов:

обновление: The 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не всегда может присутствовать.

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

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

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

"permissions": [
    "tabs"
]

и хранить URL:

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

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