Saya memiliki halaman opsi di mana pengguna dapat menentukan opsi tertentu dan menyimpannya di localStorage: options.html
Sekarang, saya juga memiliki skrip konten yang perlu mendapatkan opsi yang didefinisikan di options.html
halaman, tetapi ketika saya mencoba mengakses localStorage dari skrip konten, itu tidak mengembalikan nilai dari halaman opsi.
Bagaimana cara membuat skrip konten saya mendapatkan nilai dari localStorage, dari halaman opsi atau bahkan halaman latar belakang?
google-chrome-extension
local-storage
content-script
pengguna476214
sumber
sumber
Jawaban:
Pembaruan 2016:
Google Chrome merilis API penyimpanan: http://developer.chrome.com/extensions/storage.html
Sangat mudah digunakan seperti API Chrome lainnya dan Anda dapat menggunakannya dari konteks halaman apa pun di dalam Chrome.
Untuk menggunakannya, pastikan Anda mendefinisikannya di manifes:
Ada metode untuk "menghapus", "hapus", "getBytesInUse", dan pendengar acara untuk mendengarkan penyimpanan yang diubah "onChanged"
Menggunakan localStorage asli ( balasan lama dari 2011 )
Skrip konten dijalankan dalam konteks halaman web, bukan halaman ekstensi. Oleh karena itu, jika Anda mengakses Penyimpanan lokal dari script konten Anda, itu akan menjadi penyimpanan dari halaman web itu, bukan penyimpanan halaman ekstensi.
Sekarang, untuk membiarkan skrip konten Anda membaca penyimpanan ekstensi Anda (tempat Anda mengaturnya dari halaman opsi), Anda harus menggunakan pesan ekstensi .
Hal pertama yang Anda lakukan adalah memberi tahu skrip konten Anda untuk mengirim permintaan ke ekstensi Anda untuk mengambil beberapa data, dan data itu bisa menjadi ekstensi lokal Anda. Penyimpanan:
contentcript.js
background.js
Anda dapat melakukan API di sekitarnya untuk mendapatkan data localStorage generik ke skrip konten Anda, atau mungkin, mendapatkan seluruh array localStorage.
Saya harap itu membantu menyelesaikan masalah Anda.
Menjadi mewah dan generik ...
contentcript.js
background.js
sumber
sendResponse({data: localStorage});
?localStorage
langsung dari halaman opsi atau menggunakanchrome.extension.getBackgroundPage
dari halaman opsi.Terkadang mungkin lebih baik digunakan chrome.storage API. Lebih baik daripada penyimpanan lokal karena Anda dapat:
Berikut adalah kode sederhana yang menunjukkan penggunaan chrome.storage. Skrip konten mendapatkan url dari halaman yang dikunjungi dan stempel waktu serta menyimpannya, popup.js mendapatkannya dari area penyimpanan.
content_script.js
popup.js
"Perubahan" di sini adalah objek yang berisi nilai lama dan baru untuk kunci yang diberikan. Argumen "AreaName" mengacu pada nama area penyimpanan, baik 'lokal', 'sinkronisasi' atau 'terkelola'.
Ingatlah untuk mendeklarasikan izin penyimpanan di manifest.json.
manifes. json
sumber
onChanged
event sudah menyediakan data dalamchanges
objek. Selanjutnya, berikan perhatian khususnamespace
padaonChanged
acara tersebut. Jika Anda menyimpan sesuatu menggunakanchrome.storage.local.set
, makaonChanged
acara tersebut dipicu, tetapi membaca menggunakanchrome.storage.sync.get
tidak masuk akal.changes.visitedPages
akan tidak ditentukan jikavisitedPages
belum diubah. Bungkus garisif (changes.visitedPages) { ... }
untuk menyelesaikan masalah ini.Pilihan lain adalah menggunakan API chromestorage. Ini memungkinkan penyimpanan data pengguna dengan sinkronisasi opsional di seluruh sesi.
Satu kelemahan adalah tidak sinkron.
https://developer.chrome.com/extensions/storage.html
sumber