2016-08-01 13 views
0

Ich versuche, mit dem Inhaltsskript der Registerkarte zu kommunizieren, die gerade mit der Nachrichtenübergabe geschaltet wurde. Hier ist mein Code im background.js-Skript.OnActivated funktioniert nur, wenn neue Registerkarte geöffnet

chrome.tabs.onActivated.addListener(function(activeInfo) { 
    chrome.tabs.sendMessage(activeInfo.tabId, { greeting: "hello" }, function(response) { 
     console.log(response.farewell); 
    }); 
}); 

Und hier ist mein Code in meinem Content-Skript:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    sendResponse({ farewell: "goodbye" }); 
    loadContent(); 
}); 

Sind der Content-Skript nicht mehr in einem inaktiven Tab hören, auch wenn es wieder diesen Registerkarte eingeschaltet ist? Warum läuft das nur in einem neu geöffneten Tab?

Um weiter zu klären, warum ich dies tun möchte, sind manchmal Tabs offen, ohne neu zu laden, und mein Skript wurde bereits ausgeführt. Wenn sich Informationen zu dem Skript mit den Popup-Optionen ändern, möchte ich, dass der Inhalt beim Ändern der Registerkarte neu geladen wird und dass eine bestimmte Funktion erneut ausgeführt wird, ohne die Seite erneut zu laden. Daher ist das Einfügen des Inhaltsskripts weniger als ideal, da es bereits ausgeführt wurde.

+2

Wie bei "Einschalten ist zurück auf der Registerkarte" ist das Content-Skript, bevor in dieser Registerkarte injiziert? Ich meine, nachdem Sie die Erweiterung geladen haben, haben Sie jemals die zuvor geöffneten Registerkarten neu geladen, um sicherzustellen, dass Ihre Inhaltsskripte injiziert werden? –

+0

Sie haben einen gültigen Punkt. Ha. Ich ging zurück zu Tabs mit älteren Versionen des Inhaltsskriptes. Ich kann nicht glauben, dass das die Lösung war. Vielen Dank. Abgesehen davon, was möglicherweise magisch ist, wie hast du daraus geschlossen, dass es das sein könnte? – RandomPleb

+0

Siehe [hier] (http://stackoverflow.com/documentation/google-chrome-extension/2850/content-scripts#t=201608010722142170944), es ist eine häufig gestellte Frage und Xan hat diesen Trick in der Dokumentation erwähnt. –

Antwort

0

Versuchen Sie folgendes:

background.js

 chrome.tabs.onActivated.addListener(function(activeInfo) { 

      chrome.tabs.query({ 
       active: true, 
       currentWindow: true 
      }, function(tabs) { 

       chrome.tabs.sendMessage(activeInfo.tabId, 
        { greeting: "hello" }, function(response) { 
        console.log(response.farewell); 
       }); 
      }); 

     });