2011-11-20 87 views
0

我为Chrome扩展程序使用本地存储。当我设置使用本地存储是否持久?

localStorage['tracking'] = false; 

本地存储...然后检查使用到的本地存储设置:

if(localStorage['tracking']) 
{ 
    alert('set'); 
} else { 
    alert('Not Set'); 
    localStorage['tracking'] = true; 
} 

它工作正常。如果未设置并保持设置,它会将跟踪设置为true。但是,如果我转到一个新选项卡,并转到另一选项卡上的同一页面,它将返回未设置状态。

即使在浏览器关闭之后,本地存储器还有什么办法保持持久性吗?

编辑:我没有设置顶部的localStorage数组元素,如果脚本。刚刚意识到可能会混淆读者。

+1

本地存储的整个想法是它是持久的。但是每个域都有专门的本地存储。所以也许有两个不同的选项卡(我的意思是空的,因为不是空的,不同的地址当然不是)被认为是不同的域,这就是为什么他们不共享数据。 –

+0

我在测试时使用相同的域名(Google.com)。 – GV1

+0

GV1,那里有什么运气? –

回答

0

LocalStorage仅适用于字符串。检查this的说明。

+0

我明白了。但是,为什么它仍然有效?如果我检查localStorage中的数据,我可以看到跟踪设置为true。也许Chrome已经实现了localStorage以允许布尔值? – GV1

+0

'true'存储为'“true”'。当置于if语句中时,它的计算结果为'true'。 –

0

我曾经有过同样的问题。我想分享我的解决方案。但是,我的情况可能与您的情况不一样。

我的情况是,我有这个代码(localStrage ['xxxx'] ='xxx';)在内容脚本中。然后,我在打开新标签或打开新窗口时遇到了问题。

所以,我的解决方案是,我没有直接通过内容脚本运行此代码。内容脚本将调用“chrome.extension.sendRequest”,background.html将设置/读取localStrage并返回到内容脚本。

这将是内容脚本

chrome.extension.sendRequest({action: 'load'}, function (response) { 
      if(response){ 
        alert('set'); 
      } else { 
        alert('Not Set'); 
        chrome.extension.sendRequest({action: 'set',value:'true'}, function (response) {}); 
      } 
} 

代码这将是background.html代码。

chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) { 
    if (request.action == 'load') { 
     sendResponse(localStorage['tracking']); 

      }else if (request.action == 'set') { 
       localStorage['tracking']=request.value; 
      } 
    }); 
1

尝试:

localStorage.setItem('tracking', false); 

localStorage.getItem('tracking'); 

这些是W3C API Specification使用的方法。

由于您提到的用法未指定,因此您可能正在向当前window对象中的localStorage全局变量添加新属性,这些对象在从页面导航时变得不可用。