Jawaban:
Gunakan chrome.tabs.query()
seperti ini:
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => {
let url = tabs[0].url;
// use `url` here inside the callback because it's asynchronous!
});
Ini mengharuskan Anda meminta akses ke chrome.tabs
API di manifes ekstensi Anda :
"permissions": [ ...
"tabs"
]
Penting untuk dicatat bahwa definisi "tab saat ini" Anda mungkin berbeda tergantung pada kebutuhan ekstensi Anda.
Pengaturan lastFocusedWindow: true
dalam kueri sesuai ketika Anda ingin mengakses tab saat ini di jendela fokus pengguna (biasanya jendela paling atas).
Pengaturan currentWindow: true
memungkinkan Anda untuk mendapatkan tab saat ini di jendela tempat kode ekstensi Anda sedang dieksekusi. Misalnya, ini mungkin berguna jika ekstensi Anda membuat jendela / jendela baru (mengubah fokus), tetapi masih ingin mengakses informasi tab dari jendela tempat ekstensi dijalankan.
Saya memilih untuk menggunakan lastFocusedWindow: true
dalam contoh ini, karena Google menyebut kasus-kasus yang currentWindow
mungkin tidak selalu ada .
Anda bebas untuk lebih mempersempit kueri tab Anda menggunakan salah satu properti yang didefinisikan di sini: chrome.tabs.query
Peringatan! chrome.tabs.getSelected
sudah usang . Silakan gunakan chrome.tabs.query
seperti yang ditunjukkan pada jawaban lain.
Pertama, Anda harus mengatur izin untuk API di manifes.json:
"permissions": [
"tabs"
]
Dan untuk menyimpan URL:
chrome.tabs.getSelected(null,function(tab) {
var tablink = tab.url;
});
chrome.tabs.getSelected
tidak terdefinisi, haruskah saya menanyakannya dalam pertanyaan terpisah?
chrome.tabs.getSelected
Metode telah usang, metode yang benar tercantum di bawah ini jawabannya .
Jawaban lain menganggap Anda ingin mengetahuinya dari munculan atau skrip latar belakang.
Jika Anda ingin mengetahui URL saat ini dari skrip konten , cara JS standar berlaku:
window.location.toString()
Anda dapat menggunakan properti window.location
untuk mengakses setiap bagian dari URL, seperti host, protokol, atau jalur.
window.location.host
melihat apakah saya di "stackoverflow.com" atau tidak.
match:"<all_urls>"
situasi di bagian content_script dan Chrome tidak merekomendasikan <all_urls>.
contentScript.js
dan bukan di background.js
. Cukup kirimkan data apa pun yang telah Anda filter dari URL ke dalam pesan background.js
. Contoh: di let message = { type: "fetchVideoDate", id: getVideoId() };
mana getVideoId()
berisi eksekusi window.location.toString()
. Kalau tidak, Anda akan mendapatkan beberapa chrome://temp_background_file.html
data. Perhatikan juga bahwa kadang-kadang message
disebut request
.
Masalahnya adalah chrome.tabs.getSelected asynchronous. Kode di bawah ini umumnya tidak akan berfungsi seperti yang diharapkan. Nilai 'tablink' akan tetap tidak terdefinisi saat ditulis ke konsol karena getSelected belum memanggil panggilan balik yang menyetel ulang nilai:
var tablink;
chrome.tabs.getSelected(null,function(tab) {
tablink = tab.url;
});
console.log(tablink);
Solusinya adalah dengan membungkus kode di mana Anda akan menggunakan nilai dalam suatu fungsi dan meminta itu dipanggil oleh getSelected. Dengan cara ini Anda dijamin akan selalu memiliki nilai yang ditetapkan, karena kode Anda harus menunggu nilai diberikan sebelum dieksekusi.
Coba sesuatu seperti:
chrome.tabs.getSelected(null, function(tab) {
myFunction(tab.url);
});
function myFunction(tablink) {
// do stuff here
console.log(tablink);
}
Hai di sini adalah Sampel Google Chrome yang mengirimkan email ke Situs saat ini kepada seorang teman. Ide dasar di belakang adalah apa yang Anda inginkan ... pertama-tama ia mengambil konten halaman (bukan untuk Anda) ... kemudian mendapatkan URL (<- bagian yang baik)
Selain itu itu adalah contoh kode kerja yang bagus, yang saya lebih suka motstly daripada membaca Dokumen.
Dapat ditemukan di sini: Email halaman ini
Solusi ini sudah DIUJI.
setel izin untuk API di manifest.json
"permissions": [ ...
"tabs",
"activeTab",
"<all_urls>"
]
Pada fungsi panggilan beban pertama. https://developer.chrome.com/extensions/tabs#event-onActivated
chrome.tabs.onActivated.addListener((activeInfo) => {
sendCurrentUrl()
})
Di ubah fungsi panggilan. https://developer.chrome.com/extensions/tabs#event-onSelectionChanged
chrome.tabs.onSelectionChanged.addListener(() => {
sendCurrentUrl()
})
fungsi untuk mendapatkan URL
function sendCurrentUrl() {
chrome.tabs.getSelected(null, function(tab) {
var tablink = tab.url
console.log(tablink)
})
Bagi mereka yang menggunakan context menu api
, dokumen tidak segera jelas tentang cara mendapatkan informasi tab.
chrome.contextMenus.onClicked.addListener(function(info, tab) {
console.log(info);
return console.log(tab);
});
Anda harus memeriksa ini .
HTML
<button id="saveActionId"> Save </button>
manifes. json
"permissions": [
"activeTab",
"tabs"
]
JavaScript
Kode di bawah ini akan menyimpan semua url jendela aktif ke objek JSON sebagai bagian dari klik tombol.
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);