2013-03-08 10 views
5

Come posso scrivere su una memoria locale di un dominio diverso. L'idea è che ho bisogno della mia estensione chrome per scrivere qualcosa nella memoria locale e quando l'utente visita il sito Web associato, il sito del sito può leggere il contenuto della memoria locale. Sto provando a fare una sincronizzazione tra i dati personali dell'utente senza doverli memorizzare nel server.Chrome - Scrittura sull'archivio locale di un dominio diverso

risposta

2

Penso che l'unica soluzione per farlo è tramite l'iniezione di script a causa di restrizioni incrociate del dominio.

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); 

Aggiungere un file script.js al proprio interno l'accesso ai siti di altri localStorage, si deve aggiungere script.js a "web_accessible_resources" nel file manifest.

Si noti che lo script viene automaticamente rimosso dopo che lo script è stato completamente caricato, quindi assicurarsi che il codice che si desidera eseguire sia contenuto in una funzione autoespostabile.

6

Content scripts hanno accesso diretto a localStorage di una pagina.

Se si desidera memorizzare un valore per un dominio specifico, è sufficiente aprire una finestra o una cornice, quindi scrivere nella memoria locale della finestra/pagina.

  1. scegliere la vostra opzione preferita per attivare la pagina:

    • chrome.tabs.create per creare una scheda inattiva, forse nella finestra non attiva trovato utilizzando chrome.tabs.query.
    • L'API sperimentale offscreenTabs (sperimentale, quindi non pronta per l'uso in produzione). Vedi alcuni degli examples che ho pubblicato su SO.
    • Creare un IFrame e inserirlo nella pagina corrente.
    • window.open (non raccomandato ...)

    Quando si decide di aprire una pagina, scegliere uno che è leggero. /robots.txt è in genere una buona scelta: esiste nella maggior parte dei siti, e, è un file di testo semplice.

  2. Attiva lo script di contenuto per la pagina. È possibile utilizzare il file manifest e utilizzare le API messaging o aggiungere una richiamata al metodo chrome.tabs.create che inserisce in modo programmatico uno script di contenuto (chrome.tabs.executeScript).

Ecco un semplice esempio. Richiede l'API tabs perché sto utilizzando chrome.tabs.executeScript. Inoltre, l'origine che si desidera accedere dovrebbe essere aggiunta all'elenco delle autorizzazioni.

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

Certamente questa sembra una soluzione praticabile. Anche se il problema che ho adesso è che ho bisogno di farlo da una pagina di sfondo. La creazione di una scheda intactive mostrerà qualcosa all'utente. Le schede fuori schermo non funzionano con le pagine di sfondo. Window.open() ovviamente non è una soluzione. Proverò comunque l'iFrame e ti farò sapere come va. – budsiya

Problemi correlati