2011-03-22 52 views
0

URL散列是向瀏覽器頁面提供數據的唯一方式嗎?Javascript:將任何數據導入瀏覽器頁面?

例如,我想保存一些用戶設置而不需要服務器端,並從另一臺電腦上的用戶那裏檢索它們。

使用散列可以生成一個URL並要求用戶保存在USB閃存上的URL或快捷方式。

如果還有其他方法可以做到這一點?

+0

也許你應該解釋爲什麼要做出這樣的事情。它是沒有意義的:\如果您希望瀏覽器可移植性,應將設置保存在服務器中。 – tiagoboldt 2011-03-22 10:43:35

+0

我想避免用戶註冊。 – Somebody 2011-03-22 10:50:56

+0

那麼,有查詢字符串'?user = foo&hobby = bar' ...否則您需要服務器端用戶註冊(便攜式)或cookie(不便攜) – BGerrissen 2011-03-22 11:00:03

回答

0

你說: 與散列生成一個網址是可能的。因此,url必須是獨一無二的,才能向瀏覽器頁面提供數據。客戶端確實沒有其他方式。

+0

可以使用哈希保存鏈接。稍後的用戶只需按照該鏈接,JavaScript從中讀取哈希值。 – Somebody 2011-03-22 10:56:03

0

由於您的網址是使資源唯一(或保存設置)的唯一方式,因此您可以使用它來存儲數據。請注意,只有散列部分不會發送到服務器。對於URL http://www.iana.org/domains/example/page?data=xyz#hash

location性質:

{ 
    "hash": "#hash", 
    "host": "www.iana.org", 
    "hostname": "www.iana.org", 
    "href": "http://www.iana.org/domains/example/page?data=xyz#hash", 
    "pathname": "/domains/example/page", 
    "port": "", 
    "protocol": "http:", 
    "search": "?data=xyz" 
} 

它不建議用這種方式傳輸敏感數據(密碼,個人信息)。即使它在服務器上不可見,它也會在瀏覽器歷史記錄中顯示。

您可以使用encodeURIComponent函數來轉義特殊字符,如#&

例哈希的URL像#field:data;field2:data2(其它分離器可作爲良好):

// default settings 
var settings = { 
    "lang": "en", 
    "style": "green" 
}; 
// this should be called before the settings are used 
function loadSettings() { 
    // get the part after # and split it by `;` 
    var hashSettingsArray = location.hash.substr(1).split(";"); 
    for (var i=0; i<hashSettingsArray.length; i++) { 
     var hashSettingArray = hashSettingsArray[i].split(':'); 
     var key = decodeURIComponent(hashSettingArray[0]); 
     // if the key exists in the settings object, accept it 
     if (key in settings) { 
      // accept #field without value, defaulting to an empty string 
      var value = hashSettingsArray.length > 1 ? decodeURIComponent(hashSettingArray[1]) : ""; 
      settings[key] = value; 
     } 
    } 
} 
function getSettingsHash() { 
    var settingsArray = []; 
    for (var setting in settings) { 
     var key = encodeURIComponent(setting); 
     var value = encodeURIComponent(settings[setting]); 
     settingsArray.push(key + ":" + value); 
    } 
    // example return value: #lang:en;style:green 
    return "#" + settingsArray.join(";"); 
} 
+0

Btw有多少數據可以存儲在一個散列?是否有可能讓一連串的哈希以某種方式在網址中打開?以便它們可以連接並存儲在localStorage或cookie中。 – Somebody 2011-03-22 11:29:53

+0

有關URL的最大長度,請參閱[URL哈希參數的最大長度](http://stackoverflow.com/q/1571753/427545)上的答案。使用多個URL不是一個好主意,爲什麼不創建一個存儲了所有設置的文本字段,以便用戶可以複製它? – Lekensteyn 2011-03-22 11:34:02

+0

是的,但用戶應該打開記事本,將它們複製到記事本,然後將它們保存到USB設備。但使用網址快捷方式一切都更容易。只需拖動url到usb文件夾,然後在另一臺PC上雙擊它。 :)是不是更容易? – Somebody 2011-03-22 11:37:05

相關問題