2013-04-29 60 views
0

我試圖建立一個Chrome擴展。 在框擴展中,我允許用戶存儲變量(如URL)。 然後,在腳本處於活動狀態的頁面中,我必須檢索此值。存儲變量Chrome擴展(域1),但我需要它在遠程域(域2)

Chrome擴展:

localStorage.setItem( 「URL」,$( 「#URL」)VAL());

Domain.net(如facebook.com)

變種my_url = localStorage.getItem( 「URL」);

但localStorage的不允許跨域。不要回復我說使用GlobalStorage,已棄用。

回答

0

您必須將數據保存到localStorage的域中的地方將是牽強。 這聽起來像您控制域,這樣你就可以創建一個使用該域上的一個簡單的HTML文件的代理,把它saver.html:

<html><script> 
    localStrorage.url=decodeURIComponent(location.hash.slice(1)); 
</script></html> 

從其他網站/擴展名保存,創建一個新的IFRAME指向該HTML文件,鏈接該數據作爲URL的哈希值段:

var theValue="this will be saved as 'url' in localStorage ", 
fr=document.createElement("iframe"); 
fr.style.display='none'; 
fr.src="http://mysite.com/saver.html#"+encodeURIComponent(theValue); 
document.body.appendChild(fr); 
以這種方式

,將數據傳遞給正確的域,並保存到localStorage的。

如果需要的話,你可以在代理html頁面使用top.sendMessage()來通知您的應用程序,數據被寫入遠程localStorage的。

+0

嗯,該網站是facebook.com,你有理由喜歡,如果域是我的? – hacklover 2013-04-29 21:49:58

+0

好,如果你不能主辦的網站上的HTML文件,你不能做到這一點在所有的,但後來爲什麼有必要設置你不能控制足夠的,即使到讀出的網站上的價值它被保存了嗎? – dandavis 2013-04-29 21:56:12

+0

我正在做一個擴展,允許您將圖像和文本從Facebook導出到安裝了php腳本的外部網站。你決定在哪個服務器上加載你的東西。任何解決方案:) – hacklover 2013-04-29 22:56:31

0

您可以只使用storage APImessage passing結合起來。你沒有提到你在保存價值的位置,所以我會假設它是在彈出窗口或類似的東西。例如:

Popup.js

//Let's define urlData to be the url you obtained from the user 
chrome.storage.local.set({'urlData':urlData}); 

然後你說,你需要它的頁面,所以如果你注入一個內容腳本到該頁面,您可以得到這樣的價值:

內容腳本

chrome.runtime.sendMessage({method:'getUrl'},function(urlData){ 
    //do whatever you want with the urlData in here. I will just log it 
    console.log(urlData); 
}); 

Background.js

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){ 
    if(message.method == "getUrl"){ 
    chrome.storage.local.get('urlData',function(items){ 
     sendResponse(items.urlData); 
    }); 
    } 
});