0

尝试使用 YUI 2 存储实用程序并遵循有效的示例(在同一页面上);但是当我创建第二个页面(比如 page2.html)并尝试访问该键时,我得到的值为 null。

所以在第 1 页我打电话给:

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

如果我在同一页面上使用 getItem 我会看到它,但如果我说 page2.html:

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

我返回null。我认为这就是重点。以下是我除了 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(文档).ready(函数() {

  var localStorageEngine;
  尝试 {
    localStorageEngine = YAHOO.util.StorageManager.get(
        YAHOO.util.StorageEngineHTML5.ENGINE_NAME,
        YAHOO.util.StorageManager.LOCATION_LOCAL,
        {   
            力:假,
            命令: [
                YAHOO.util.StorageEngineHTML5,
                YAHOO.util.StorageEngineSWF,
                YAHOO.util.StorageEngineGears
            ]
        }
     );
  } 捕捉(e){
    YAHOO.log("不存在支持的存储机制。");
    本地存储引擎 = 假;
  }
  如果(本地存储引擎){
    localStorageEngine.subscribe(localStorageEngine.CE_READY, function() {
        localStorageEngine.setItem('testText', '这是一个胜利(本地存储引擎)');
        localStorageEngine.setItem('testNumber', 1234567890);
        localStorageEngine.setItem('testBoolean', true);
        警报(localStorageEngine.getItem('testText'));

        console.log("len:", localStorageEngine.length);
        console.log("有密钥:", localStorageEngine.hasKey("testText"));
    });
  }
});


编辑:

埃里克的回答(非常有帮助!)有效,但在我的情况下,它特别是 swf 行(没有使用准备好的 jquery 文档而不是雅虎的相同)。这是相关的代码,在其他方面几乎相同:


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

编辑 2 为混乱的编辑道歉,但我已经回到这篇文章,因为我现在需要实施并意识到 Eric 示例的第二页(尽管他可能选择将其删除)仍然在获取之前设置值所以它并不能真正体现保留页面之间的价值。因此,我在获取之前将其添加到第二页,当我对 getItem 发出警报时,它又返回为空:

/*
        localStorageEngine.setItem('testText', '这是一个胜利(本地存储引擎)');
        localStorageEngine.setItem('testNumber', 1234567890);
        localStorageEngine.setItem('testBoolean', true);
*/

基本上是注释掉第 2 页上的设置代码。在阅读了有关底层 DOM 存储对象的更多信息后,我发现它与特定域相关联。例如,如果我这样做:

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

在我的本地机器上,我得到一个不允许的操作,但如果我将它上传到服务器,它就可以工作。对存储实用程序示例做了同样的事情,它也可以工作。所以要点是把它放在服务器上。

4

1 回答 1

1

抢,

我设置了两个测试页面,它们基本上是从您的实例化代码中复制和粘贴的:

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

当我从一个到另一个时,每次都会弹出成功。

我的代码和你的代码之间唯一的显着区别是省略了 jQuery(注意:这最终对功能没有影响)和添加了 SWF 位置(对于不支持 HTML5 存储的浏览器来说,作为后备很重要;更新:这就是解决 Rob 遇到的问题的方法)。但我在 Safari 5 和 FF 3.6 中进行了测试,所以它应该只是直接使用 HTML5 支持。

这些页面对您有用吗?

-埃里克

于 2010-08-05T03:20:13.820 回答