Auf dem Hintergrundskript js habe ich einen Listener, der chrome.storage-Updates verarbeitet indem Sie sendMessage an das Inhaltsskript senden und auf die Bestätigung warten. Das Ziel besteht darin, Skripte sofort aus dem Inhaltsskript auszulösen, sobald Benutzereinstellungen aktualisiert werden, aber sendMessage scheint nicht auszulösen.
Der Code, den ich verwende, ist unten:
Code: Select all
// background.js
chrome.storage.onChanged.addListener( async ( changes, namespace ) => {
const queryOptions = { active: true, lastFocusedWindow: true }
const [ tab ] = await chrome.tabs.query( queryOptions )
for ( const [ key, { newValue } ] of Object.entries( changes ) ) {
const message = JSON.parse( `{ "${ key }":${ newValue }}` )
chrome.tabs.sendMessage( tab.id, { message }, function ( response ) {
if ( !chrome.runtime.lastError ) {
if ( typeof response !== 'undefined' ) {
console.log( { response } )
}
}
} )
}
} )
// content.js
chrome.runtime.onMessage.addListener( function ( message, sender, sendResponse ) {
console.log( { message } )
const response = 'got it'
sendResponse( { response } )
} )
Außerdem habe ich den gesamten Code auskommentiert, außer dem, was für die Nachrichtenübermittlung benötigt wird, aber immer noch gleiche Ergebnisse.
Ich habe zuvor eine Erweiterung entworfen, die Nachrichten zwischen Hintergrund- und Inhaltsskripten sendet, die fast denselben Code verwendet, aber in diesem Fall scheint dies etwas zu verhindern.
Ich bin mir weitgehend sicher, dass das nicht sein kann Code von der Site, auf die meine Erweiterung einwirkt, verhindert sendMessage, kann aber nicht sicher sein