Reputation: 1982
What is the proper way to notify my content_script.js of a settings change?
When I write my setting to localStorage I want to do a sendMessage/sendRequest to the content script so it can apply them accordingly.
I would have to have to do options.js > background.js > content_script.js
Thoughts?
options.js
$('#add-filter-button')
.button()
.click(function(event) {
event.preventDefault();
var userFilters = new Array();
var newFilter = $('#add-filter').val();
if (newFilter !== undefined && newFilter.length > 0) {
$('#filters-box').append(new Option(newFilter, newFilter));
$('#add-filter').val('');
$('#filters-box option').each(function() {
userFilters.push( $(this).text() );
});
localStorage['userFilters'] = JSON.stringify(userFilters);
chrome.storage.sync.set({'userFilters': userFilters});
}
});
content.js
chrome.storage.onChanged.addListener(function(changes, namespace) {
for (key in changes) {
var storageChange = changes[key];
console.log('Storage key "%s" in namespace "%s" changed. ' +
'Old value was "%s", new value is "%s".',
key,
namespace,
storageChange.oldValue,
storageChange.newValue);
}
});
Upvotes: 2
Views: 615
Reputation: 1290
Use chrome.storage
API https://developer.chrome.com/docs/extensions/reference/storage/#event-onChanged
It has an event onChanged
For example:
settings.js
chrome.storage.local.set({'value': theValue});
content.js
chrome.storage.onChanged.addListener(function(changes, namespace) {
for (key in changes) {
var storageChange = changes[key];
console.log('Storage key "%s" in namespace "%s" changed. ' +
'Old value was "%s", new value is "%s".',
key,
namespace,
storageChange.oldValue,
storageChange.newValue);
}
});
Upvotes: 3