2013-03-08 15 views
5

Wie kann ich in einen lokalen Speicher einer anderen Domäne schreiben. Die Idee ist, dass ich meine Chrome-Erweiterung brauche, um etwas in den lokalen Speicher zu schreiben, und wenn der Benutzer die zugehörige Website besucht, kann die Site-Site den Inhalt des lokalen Speichers lesen. Ich versuche eine Synchronisierung zwischen den persönlichen Daten des Benutzers durchzuführen, ohne sie auf dem Server speichern zu müssen.Chrome-Erweiterung - Schreiben in den lokalen Speicher einer anderen Domäne

Antwort

2

Ich denke, die einzige Lösung, um dies zu tun ist über Skript-Injektion aufgrund der domänenübergreifenden Einschränkungen.

var s = document.createElement('script'); 
s.src = chrome.extension.getURL("script.js"); 
s.onload = function() { 
    this.parentNode.removeChild(this); 
}; 
(document.head||document.documentElement).appendChild(s); 

eine Datei script.js zu Ihrer Erweiterung der anderen Seiten local Zugriff hinzufügen, haben Sie script.js auf „web_accessible_resources“ in Ihrer Manifest-Datei hinzuzufügen.

Beachten Sie, dass das Skript automatisch entfernt wird, nachdem das Skript vollständig geladen wurde. Stellen Sie daher sicher, dass der Code, den Sie ausführen möchten, in einer selbstausführbaren Funktion enthalten ist.

6

haben direkten Zugriff auf eine lokaleSpeicherstelle.

Wenn Sie einen Wert für eine bestimmte Domäne speichern möchten, öffnen Sie einfach ein Fenster oder einen Rahmen und schreiben Sie in den lokalen Speicher des Fensters/der Seite.

  1. Ihre Lieblings-Option Wählen Sie die Seite zu aktivieren:

    • chrome.tabs.create ein inaktives Register zu schaffen, vielleicht in den nicht aktiven Fenstern unter Verwendung chrome.tabs.query gefunden.
    • Die experimentelle offscreenTabs API (experimentell, so nicht bereit für den Einsatz in der Produktion). Siehe einige der examples, die ich auf SO gepostet habe.
    • Erstellen Sie einen IFrame und fügen Sie ihn in die aktuelle Seite ein.
    • window.open (nicht empfohlen ...)

    Wenn Sie sich entscheiden, eine Seite zu öffnen, eine auswählen, die leichtgewichtig ist. /robots.txt ist normalerweise eine gute Wahl: Es existiert auf den meisten Seiten, und es ist eine einfache Textdatei.

  2. Aktivieren Sie das Inhaltsskript für die Seite. Sie können entweder die Manifestdatei verwenden und die APIs messaging verwenden oder einen Rückruf zur chrome.tabs.create-Methode hinzufügen, die programmatisch ein Inhaltsskript einfügt (chrome.tabs.executeScript).

Hier ist ein einfaches Beispiel. Es erfordert die tabs API, weil ich chrome.tabs.executeScript verwende. Außerdem sollte der Ursprung, auf den Sie zugreifen möchten, ebenfalls der Berechtigungsliste hinzugefügt werden.

chrome.tabs.create({ 
    active: false, 
    url: 'http://stackoveflow.com/robots.txt' 
}, function(tab) { 
    chrome.tabs.executeScript(tab.id, { 
     code: 'localStorage.setItem("key", "value");' 
    }, function() { 
     chrome.tabs.remove(tab.id); 
    }); 
}); 
+1

Sicher sieht dies wie eine praktikable Lösung aus. Obwohl das Problem, das ich gerade habe, ich muss es von einer Hintergrundseite tun. Wenn Sie eine intakte Registerkarte erstellen, wird dem Benutzer etwas angezeigt. Offscreen-Registerkarten funktionieren nicht mit Hintergrundseiten. Window.open() ist offensichtlich keine Lösung. Ich werde aber den iFrame ausprobieren und euch wissen lassen wie es geht. – budsiya

Verwandte Themen