2016-09-09 1 views
1

Ich entwickle eine Mozilla Firefox Erweiterung mit dem Add-on SDK. Auf jedem Tab-Change-Event möchte ich Cookies des angegebenen Hosts lesen, die auf einer anderen Registerkarte geöffnet sind. Ich habe die Tab-Änderung erreicht, versuche aber herauszufinden, wie ich die Cookies des angegebenen Hosts in der zuletzt aktivierten Registerkarte abrufen kann.Cookies des angegebenen Hosts lesen mit Firefox Add-on SDK

var tabs = require("sdk/tabs"); 
tabs.on('activate', function(tab) { 
    // want to get cookies here. 
}); 
+0

Ähnliche/nahe Duplikat: [Zugriff auf bestimmte Cookies nach Domain/Name in Firefox-Erweiterung] (http://Stackoverflow.com/q/9477682/3773011) – Makyen

+0

Beim Lesen Ihrer Frage ist es mir unklar, von welcher Registerkarte Sie versuchen, die Domain zu erhalten, für die Sie die Cookies wünschen. Ihr Code sieht so aus, als ob Sie die Domain für die gerade aktivierte Registerkarte abrufen möchten. Ihr Text bedeutet, dass Sie die Domäne von einer anderen Registerkarte abrufen möchten. – Makyen

+0

ja die Domain, die ich angegeben habe, ist in einer anderen Registerkarte –

Antwort

1

Nun, aus einem tabs.on('activate') Event-Handler, haben Sie die tab. Das tab-Objekt verfügt über eine Eigenschaft url, von der Sie den Host erhalten können. Sobald Sie den Host haben, können Sie die Cookies für diesen Host erhalten. Du hast nicht gesagt, was du mit ihnen machen willst. Also, hier ist nur ein Weg, sie aufzuzählen.

Um einige Methoden von zu verwenden, benötigen Sie auch Chrome Authority.

var domainToUse = 'google.com'; 
var { Services } = require("resource://gre/modules/Services.jsm"); 
var { Cc, Cu, Ci} = require("chrome"); 
let cookieEnumerator = Services.cookies.getCookiesFromHost(domainToUse); 
while (cookieEnumerator.hasMoreElements()) { 
    let cookie = cookieEnumerator.getNext().QueryInterface(Ci.nsICookie2); 
    console.log(cookie.host + ";" + cookie.name + "=" + cookie.value + "\n"); 
} 

Update für neuere Versionen von Firefox:
Hinweis: Mindestens von Firefox 50.0a2 (derzeit Firefox Developer Edition) ist es notwendig, einen etwas anderen Anruf zu getCookiesFromHost() verwenden, um die cookieEnumerator zu erhalten. Ohne die Änderung wird beim Aufruf von getCookiesFromHost() eine Warnmeldung in der Browser-Konsole angezeigt, die Sie dazu anweist, die nsICookieManager2 MDN documentation page zu besuchen, die keine aktualisierten Informationen zur Warnung oder eine Dokumentation zur Änderung enthält. Ich musste im Quellcode nachsehen, was erforderlich war. Was wünschenswert erscheint, ist, den aktuellen Inhalt document zu übergeben. Allerdings von einem Hintergrundskript, das nicht sinnvoll erschien. Die andere Möglichkeit besteht darin, einfach ein leeres Objekt {} zu übergeben. Somit wird diese Zeile geändert: „die originAttributes von Cookies, die abgerufen werden würden“

let cookieEnumerator = Services.cookies.getCookiesFromHost(domainToUse,{}); 

Es soll für das Bestehen in seine

Der obige Code ist leicht von meinem answer to "How to set custom cookies using Firefox Add-on SDK (using Services from Firefox Add-on SDK)" geändert.

+0

Danke, dass es funktioniert .. –

+0

, die wahrscheinlich nicht mit privaten Browsing-Fenstern, Identitätscontainern oder First Party Isolation (die beiden letzteren sind in-Entwicklung Funktionen) funktionieren – the8472

+0

@ the8472, wenn in privaten Browser Windows den obigen Code (beachten Sie Änderungen erforderlich für neuere Firefox-Versionen) werden die Cookies zurückgeben, die beim normalen Surfen eingestellt wurden. Es werden keine Cookies empfangen, die möglicherweise für das private Browserfenster übertragen wurden. – Makyen

Verwandte Themen