Odpowiedzi:
Użyj w chrome.tabs.query()
ten sposób:
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
let url = tabs[0].url;
// use `url` here inside the callback because it's asynchronous!
});
Wymaga to żądania dostępu do chrome.tabs
interfejsu API w manifeście rozszerzenia :
"permissions": [ ...
"tabs"
]
Należy pamiętać, że definicja „bieżącej karty” może się różnić w zależności od potrzeb rozszerzenia.
Ustawienie lastFocusedWindow: true
w zapytaniu jest odpowiednie, gdy chcesz uzyskać dostęp do bieżącej karty w oknie użytkownika (zazwyczaj najwyższym oknie).
Ustawienie currentWindow: true
pozwala uzyskać bieżącą kartę w oknie, w którym aktualnie działa kod twojego rozszerzenia. Na przykład może to być przydatne, jeśli twoje rozszerzenie tworzy nowe okno / wyskakujące okienko (zmieniając fokus), ale nadal chce uzyskać dostęp do informacji o karcie z okna, w którym rozszerzenie zostało uruchomione.
Wybrałem użycie lastFocusedWindow: true
w tym przykładzie, ponieważ Google przywołuje przypadki, w których currentWindow
nie zawsze mogą być obecne .
Możesz dodatkowo zawęzić zapytanie dotyczące karty, korzystając z dowolnej zdefiniowanej tutaj właściwości: chrome.tabs.query
Ostrzeżenie! chrome.tabs.getSelected
jest przestarzałe . Użyj, chrome.tabs.query
jak pokazano w innych odpowiedziach.
Najpierw musisz ustawić uprawnienia do interfejsu API w pliku manifest.json:
"permissions": [
"tabs"
]
I do przechowywania adresu URL:
chrome.tabs.getSelected(null,function(tab) {
var tablink = tab.url;
});
chrome.tabs.getSelected
jest niezdefiniowane, czy mógłbym zadać to w osobnym pytaniu?
chrome.tabs.getSelected
Metoda została zaniechana, prawidłowa metoda jest notowana na ten temat poniżej odpowiedź .
Inne odpowiedzi zakładają, że chcesz to wiedzieć ze skryptu wyskakującego lub tła.
Jeśli chcesz znać bieżący adres URL ze skryptu treści , zastosowanie ma standardowy sposób JS:
window.location.toString()
Możesz użyć właściwości, window.location
aby uzyskać dostęp do poszczególnych części adresu URL, takich jak host, protokół lub ścieżka.
window.location.host
tylko zobaczyć, czy jestem na „stackoverflow.com”, czy nie.
match:"<all_urls>"
sytuacji w sekcji content_script, a Chrome nie poleca <all_urls>.
contentScript.js
a nie w background.js
. Po prostu przekaż wszystkie dane, które przefiltrowałeś z adresu URL, do wiadomości background.js
. Przykład: let message = { type: "fetchVideoDate", id: getVideoId() };
gdzie getVideoId()
zawiera wykonanie window.location.toString()
. W przeciwnym razie otrzymasz trochę chrome://temp_background_file.html
danych. Zauważ też, że czasami message
się nazywa request
.
Problem polega na tym, że chrome.tabs.getSelected jest asynchroniczny. Poniższy kod zazwyczaj nie będzie działał zgodnie z oczekiwaniami. Wartość „tablink” będzie nadal niezdefiniowana, gdy zostanie zapisana w konsoli, ponieważ getSelected nie wywołał jeszcze wywołania zwrotnego, które resetuje wartość:
var tablink;
chrome.tabs.getSelected(null,function(tab) {
tablink = tab.url;
});
console.log(tablink);
Rozwiązaniem jest zawinięcie kodu, w którym będzie używana wartość w funkcji, i wywołanie jej przez getSelected. W ten sposób masz gwarancję, że zawsze ustawisz wartość, ponieważ Twój kod będzie musiał czekać na podanie wartości przed jej wykonaniem.
Wypróbuj coś takiego:
chrome.tabs.getSelected(null, function(tab) {
myFunction(tab.url);
});
function myFunction(tablink) {
// do stuff here
console.log(tablink);
}
Cześć, oto próbka Google Chrome, która wysyła wiadomość e-mail do aktualnej witryny do znajomego. Podstawową ideą jest to, czego chcesz ... przede wszystkim pobiera zawartość strony (nie jest dla ciebie interesująca) ... następnie otrzymuje adres URL (<- dobra część)
Dodatkowo jest to dobry przykład działającego kodu, który wolę bardziej niż czytanie Dokumentów.
Można znaleźć tutaj: Wyślij tę stronę pocztą e-mail
To rozwiązanie jest już TESTOWANE.
ustaw uprawnienia dla interfejsu API w pliku manifest.json
"permissions": [ ...
"tabs",
"activeTab",
"<all_urls>"
]
Przy pierwszym wywołaniu funkcji wywołania. https://developer.chrome.com/extensions/tabs#event-onActivated
chrome.tabs.onActivated.addListener((activeInfo) => {
sendCurrentUrl()
})
Przy zmianie funkcji połączenia. https://developer.chrome.com/extensions/tabs#event-onSelectionChanged
chrome.tabs.onSelectionChanged.addListener(() => {
sendCurrentUrl()
})
funkcja uzyskania adresu URL
function sendCurrentUrl() {
chrome.tabs.getSelected(null, function(tab) {
var tablink = tab.url
console.log(tablink)
})
W przypadku osób korzystających z context menu api
dokumentów dokumenty nie są od razu jasne, jak uzyskać informacje o karcie.
chrome.contextMenus.onClicked.addListener(function(info, tab) {
console.log(info);
return console.log(tab);
});
Trzeba sprawdzić to .
HTML
<button id="saveActionId"> Save </button>
manifest.json
"permissions": [
"activeTab",
"tabs"
]
JavaScript
Poniższy kod zapisze wszystkie adresy URL aktywnego okna w obiekcie JSON w ramach kliknięcia przycisku.
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);