Die Chrome-Erweiterung kann sendMessasge() vom chrome.storage.onChange-Handler nicht sendenJavaScript

Javascript-Forum
Anonymous
 Die Chrome-Erweiterung kann sendMessasge() vom chrome.storage.onChange-Handler nicht senden

Post by Anonymous »

Ich entwickle eine Chrome V3-Erweiterung mit einer Optionsseite, die chrome.storage verwendet, um Benutzereinstellungen beizubehalten.
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 } )
} )

Da ich eine Optionsseite anstelle der Benutzeroberfläche mit eingebetteten Optionen verwende, ist die chrome.tabs-API verfügbar. Allerdings habe ich die Dokumente falsch gelesen und zunächst chrome.runtime.sendMessage verwendet. Dennoch kann ich die gewünschte Registerkarte aus dem Hintergrundskript erfassen, d. h. Ich kann ein Objekt abrufen, das den aktiven Tab darstellt und ID-Schlüssel für Tab und Fenster enthält.
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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post