2016-07-11 11 views
0

Ich erstelle eine Google Chrome-Erweiterung, die Screenshots von Websites erfasst, und ich brauche meine popup.js, um eine Nachricht an meine background.js senden zu können. Ich erhalte diesen Fehler: Error in response to storage.get: TypeError: Cannot read property 'addListener' of undefined.Fehler in der Antwort auf storage.get: TypeError: Kann die Eigenschaft 'addListener' von undefined nicht lesen

Hier ist meine aktuellen Code für background.js:

chrome.storage.sync.get({ 
    extensionBehavior: 'onClick', 
    logIn: false 
}, function(items) { 
    if(items.extensionBehavior == 'onClick'){ 
     // When the extension icon is clicked, send a message to the content script 
     chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
      if (!request.message){ 
       var img; 
       chrome.tabs.captureVisibleTab(null, {}, function(dataURL){ 
        img = dataURL; 
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
         chrome.tabs.sendMessage(tabs[0].id, {"message": tabs[0].url, "statusCode": 0, "image": img, "note" : request.note}, function(response){}); 
        }); 
       }); 
      } 
     }); 
    } 
    else { 
     /* ... */ 
    } 
}); 

Meine popup.js die Nachricht richtig sendet, aber mein Hintergrundskript hält mir den gleichen Fehler zu geben. Ist die API chrome.runtime innerhalb von chrome.storage.sync.get nicht verfügbar? Bevor ich diese Methode hinzufügte, funktionierte die chrome.tabs API gut, und das Popup sendet definitiv die Nachricht (ich testete es).

+1

'chrome.runtime.onMessage' ist nicht definiert. –

+0

aber ich habe 'chrome.runtime.onMessage.addListener' in meinem Inhaltsskript verwendet und es funktionierte gut. @SpencerWieczorek –

+0

Keine Ahnung von diesen Chrome-APIs, aber versuchen Sie 'console.log (chrome.runtime)', um zu sehen, ob Sie das erwartet haben. – Oriol

Antwort

1

Das Problem war, dass ich tabs.sendMessage anstelle von runtime.sendMessage mit meinem popup.js sendete. Die Tabs-API sendet Nachrichten an die Inhaltsskripts, während die Laufzeit-API Nachrichten überall senden kann.