YUI 2: Storage Utility - почему не сохраняются ключи / значения от страницы к странице - PullRequest
0 голосов
/ 04 августа 2010

Попытка использовать YUI 2 Storage Utility и следование примеру, который работал (на той же странице); но когда я создаю вторую страницу (скажем, page2.html) и пытаюсь получить доступ к ключу, я получаю нулевое значение для этого значения.

Так на первой странице я звоню:

localStorageEngine.setItem('testText', 'this is a triumph (local storage engine)');

и если я использую getItem на той же странице, я вижу его, но если я надену скажем page2.html:

alert(localStorageEngine.getItem('testText'));

Я возвращаюсь ноль. Я думал, что это было главное. Вот что я включил в дополнение к jquery 1.4.2

src="http://yui.yahooapis.com/combo?2.8.1/build/yahoo-dom-event/yahoo-dom-event.js&2.8.1/build/cookie/cookie-min.js&2.8.1/build/element/element-min.js&2.8.1/build/swf/swf-min.js&2.8.1/build/swfstore/swfstore-min.js&2.8.1/build/storage/storage-min.js"

Вот основная часть моего кода JavaScript:

//YAHOO.util.Event.onDOMReady(function() {  
jQuery(document).ready(function() {

  var localStorageEngine;
  try {
    localStorageEngine = YAHOO.util.StorageManager.get(
        YAHOO.util.StorageEngineHTML5.ENGINE_NAME,
        YAHOO.util.StorageManager.LOCATION_LOCAL, 
        {   
            force: false,
            order: [
                YAHOO.util.StorageEngineHTML5,
                YAHOO.util.StorageEngineSWF,
                YAHOO.util.StorageEngineGears
            ]
        }
     );
  } catch(e) {
    YAHOO.log("No supported storage mechanism present.");
    localStorageEngine = false;
  }
  if(localStorageEngine) {
    localStorageEngine.subscribe(localStorageEngine.CE_READY, function() {
        localStorageEngine.setItem('testText', 'this is a triumph (local storage engine)');
        localStorageEngine.setItem('testNumber', 1234567890);
        localStorageEngine.setItem('testBoolean', true);
        alert(localStorageEngine.getItem('testText'));

        console.log("len: ", localStorageEngine.length);
        console.log("has key: ", localStorageEngine.hasKey("testText"));
    });
  }
});


РЕДАКТИРОВАТЬ:

Ответ Эрика (очень полезный!) Сработал, но в моем случае он оказался именно строкой swf (без использования готового документа jquery вместо того же, что у Yahoo). Вот соответствующий код, который в остальном почти такой же:



//YAHOO.util.Event.onDOMReady(function() {  
jQuery(document).ready(function() {
  YAHOO.util.StorageEngineSWF.SWFURL = 'assets/swfstore2-8-1.swf';

РЕДАКТИРОВАТЬ 2 Извиняюсь за грязные правки, но я вернулся к этому посту, так как теперь мне нужно реализовать и понял, что вторая страница на примере Эрика (хотя он может снять его) все еще устанавливает значение до получения, так что не является примером сохранения значения между страницами. Поэтому я добавил это на 2-ю страницу до получения, и оно снова стало нулевым, когда я сделал предупреждение на getItem:

/*
        localStorageEngine.setItem('testText', 'this is a triumph (local storage engine)');
        localStorageEngine.setItem('testNumber', 1234567890);
        localStorageEngine.setItem('testBoolean', true);
*/

по существу, комментируя установленный код на странице 2. После прочтения дополнительной информации о базовом объекте DOM Storage я вижу, что он привязан к определенному домену. Например, если я сделаю:

sessionStorage.setItem("name", "Rob");

на моем локальном компьютере операция запрещена, но если я загружаю ее на сервер, она работает. Сделал то же самое с примерами утилиты хранения, и это также сработало. Таким образом, суть заключается в том, чтобы поставить его на сервер.

1 Ответ

1 голос
/ 05 августа 2010

Rob

Я установил две тестовые страницы, которые в основном копируются и вставляются из вашего экземпляра кода:

http://ericmiraglia.com/yui/demos/storage.php

Когда я перехожу с одного на другое, я каждый раз получаю всплывающее окно с описанием успеха.

Единственное существенное различие между моим и вашим кодом - это отсутствие jQuery (примечание: это в конечном итоге не влияет на функциональность) и добавление местоположения SWF (что важно в качестве запасного варианта для браузеров, не поддерживающих HTML5). хранилище; ОБНОВЛЕНИЕ: это то, что решило проблему, с которой столкнулся Роб). Но я тестировал в Safari 5 и FF 3.6, поэтому он должен был просто напрямую использовать поддержку HTML5.

Эти страницы работают для вас?

-Эрик

...