2012-09-05 20 views
2

我正在創建一個書籤,該書籤要在廣泛的域中使用。我想設置一些cookie來存儲這個書籤的臨時設置,所以我認爲從這個腳本設置一個cookie會將cookie分配給腳本原點的域。是否可以設置打破跨域安全性的域cookie的javascript書籤?

這並非如此,小書籤能夠將cookie分配給當前正在查看的網站的域。這不適合我的需要(這會記住每個域的設置,而不是所有域中的小書籤)。

我的問題是,這是不是打破了跨域策略?還有一個後續問題,我如何爲小書籤存儲cookie,而不是使用正確的域名。

+2

Bookmarklet被認爲是在安裝它們的用戶的祝福下運行的。 – Pointy

回答

3

Bookmarklets正在當前頁面的上下文中運行,以便它們運行的​​是安全上下文,因此這不會中斷跨域策略。您只能在當前頁面的域中設置Cookie。正因爲如此,您的書籤不能擁有自己的Cookie。

這與從各種域加載到給定頁面的腳本相同。頁面的起源是重要的,而不是腳本的起源。

我知道爲您的腳本跨所有域保存一次設置的唯一方法是使用跨域JSONP並將設置存儲在您的服務器上,但您仍可能難以識別唯一用戶。

這聽起來像你想要做的事情會更適合於插件本地存儲的瀏覽器插件。

+0

這聽起來像是最好的解決方案 - 瀏覽器插件(可以像用戶腳本一樣簡單)可以使用本地存儲來存儲該插件的設置。小書籤不能在其自身內存儲設置。 –

+0

當然,你的第一句話爲我澄清了這一點。例如,使用谷歌代碼來加載jQuery仍然會在我的域中存儲cookie,而不是谷歌。謝謝。 – Rhys

0

它沒有打破跨域策略,因爲它實際上運行在一個單獨的域上(這是書籤背後的要點)。

如果要存儲cookie信息,請使用第三方服務(例如,讓自己的服務器接受cookie更改的代碼)。 請注意,這可能是一個安全問題,因爲每個域都能夠爲您的用戶獲取cookie,除非您將服務設爲只寫(我懷疑)。

然後還有另一種選擇 - 不要將設置保存在cookie中。改爲使用其他存儲介質。