2016-07-09 9 views
1

Ich mache eine Erweiterung in dem der Client einige Daten in der Verlängerung erzeugt und speichert sie in einem Array von Objekten in localStorage dynamisch wie:Wie kann ich dem Kontextmenü dynamisch eine Option in einer Chrome-Erweiterung hinzufügen?

var list = [{},{newly added object}]; 
localStorage.setItem("data", JSON.stringify(links)); 

Wenn ein Client einige Daten speichert, möchte ich zeigen, das neu hinzugefügte Objekt im Kontextmenü von Chrome. Wenn es so viele Objekte in einem Array ist, ist es schwierig für mich, diese jedes Mal zu schreiben:

chrome.contextMenus.create({ 
    id: "****", 
    title: "***", 
    contexts: ["all"] 
}); 

chrome.contextMenus.onClicked.addListener(function(info, tab) { 
    if (info.menuItemId == "some-id") { 
     // do something 
} 

}); 

Wie kann ich das tun? Jeder hilfreiche Vorschlag wird geschätzt.

+1

Nicht viel über Ihre Frage klar. Angenommen, Sie haben ein Array von Objekten, und Sie möchten für jedes Objekt Kontextmenüelemente erstellen. Gibt es also Probleme bei der Verwendung der 'forEach'-Schleife? –

+0

@Hibara Ich habe diesen ** chrome.contextMenus.create ** Code im Hintergrundskript platziert, aber er läuft nur beim Laden, wenn der Benutzer ein neues Objekt erstellt, dann läuft das Hintergrundskript erst wieder nach dem Laden und ich möchte es gleich nach dem Hinzufügen ausführen . – shuboy2014

+0

dann denke ich, dass Sie den Titel der Frage aktualisieren sollten und es scheint ein wenig verwirrend. Ich werde versuchen, eine Antwort zu veröffentlichen, basierend auf meinem Verständnis. –

Antwort

2
  1. Jedes Mal, wenn Sie localStorage.setItem nennen, könnte man so etwas wie Message Passing sagen Hintergrund Webseite ist es Zeit, Kontextmenüs zu aktualisieren. Dann könnten Sie chrome.contextMenus.create oder chrome.contextMenus.update verwenden, um das Kontextmenü zu aktualisieren.

    chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
        chrome.contextMenus.create({ 
         id: "****", 
         title: "***", 
         contexts: ["all"] 
        }); 
    }); 
    
  2. Sie können auch Benutzerdaten über chrome.storage.local.set, speichern, die zwischen Content-Skripte und Hintergrund Seite geteilt wird, dann könnten Sie Ereignishandler für chrome.storage.onChanged in backgorund Seite, und aktualisieren Sie das Kontextmenü innerhalb des Handlers registrieren.

    chrome.storage.onChanged.addListener(function(changes, areaName) { 
        chrome.contextMenus.create({ 
         id: "****", 
         title: "***", 
         contexts: ["all"] 
        }); 
    }); 
    
+0

Ihre Option 1 erstellt nicht ** Kontextmenü ** unmittelbar nach dem Hinzufügen eines neuen Objekts. – shuboy2014

+0

Wenn ich Chrome neu starte dann wird es angezeigt. – shuboy2014