在firefox 9中,当我这样做时:
var msg = sessionStorage.getItem("message");
浏览器询问错误:"不支持操作",firefox没有实现html5的webStorage?或者这种情况仅适用于sessionStorage而不适用于localStorage?谢谢.
在带有网址http://foo.com/的标签页上,我设置了一个sessionStorage项目,因此 -
sessionStorage.bar="hello";
Run Code Online (Sandbox Code Playgroud)
然后我在同一个域的任何路径上打开一个新窗口 -
window.open("http://foo.com/any/path");
Run Code Online (Sandbox Code Playgroud)
然后在新窗口中我发现 -
sessionStorage.bar === "hello"
Run Code Online (Sandbox Code Playgroud)
是真的.如果我使用带有target ="_ blank"属性的链接打开新窗口,则会发生完全相同的事情.打开新选项卡时也会发生完全相同的事情,而不是新窗口.另一件需要注意的是,这只适用于在打开新窗口之前在sessionStorage上设置的项目.在打开新窗口后,在任一窗口中添加或更改sessionStorage上的任何项目都不会以任何方式影响其他窗口.
我认为sessionStorage应该被限定为单个选项卡/窗口,但显然sessionStorage从另一个窗口打开时会扩展到新的选项卡和窗口.
有办法防止这种情况吗?我可以测试window.opener的存在来检测这样的情况,但是如果可以首先防止它那么会更清洁.
谢谢!
我的一个网页中有一些复选框,并且此页面必须每 1 分钟刷新一次以解决某些数据一致性问题。
我使用window.sessionStoage保留已选中的复选框,以便用户不会丢失已在页面刷新时选中的复选框。
但是我想清除sessionStorage用户离开该页面的时间(不一定离开我的网站,可能会转到同一网站上的另一个页面),同样如果我使用该onunload事件,则存储将被清除以防万一刷新也。
是否有任何其他事件或任何解决方法可以帮助我实现这一目标。
我正在尝试为我的所有JS编写测试,并且测试(我使用的是Jasmine)在浏览器中本地运行.由于安全限制(?)sessionStorage在Firefox中无法在本地工作(在浏览器中查看文件:/// ...).
快速举例:
window.sessionStorage.setItem('foo', 'bar');
Run Code Online (Sandbox Code Playgroud)
这给出了"错误:不支持操作".
我尝试使用自己的模拟方法覆盖window.sessionStorage,但没有运气.
我目前唯一的解决方案是将与sessionStorage相关的所有内容放在try/catch块中.
有关如何最好地处理此问题的任何建议?
\n\n\n\n
ls.getItem[i]使用索引而不是键使 Chrome 中的 localStorage 读取性能加倍ls.getItem(\'key\')
资料来源:这篇推文和这篇演讲(幻灯片 19)由一些编写了几个很棒的 JavaScript 库的人撰写。我想这些人知道他们在说什么,所以我想知道为什么这对我不起作用:
\n\nlocalStorage.setItem(0, \'Hello world\');\nlocalStorage.getItem(0); // \'Hello World\' \xe2\x80\x93 Works as expected\nlocalStorage.getItem[0]; // undefined\nRun Code Online (Sandbox Code Playgroud)\n\n我是不是误会了什么?根据该演讲,最后一个方法调用应该返回\'Hello world\'not undefined。
他们还链接到这个 JS Bin,但是当通过那里的索引读取值时,我仍然得到undefined.
编辑:我知道如何使用 localStorage 正确读取索引,我正在询问getItem索引。看来这个演讲只是暗示了错误的用法?另外,我想知道为什么 32 个人在没有测试的情况下转发了这个用法。那些事情让我很恼火。
我使用会话存储来设置一个可以采用数值或null. 我注意到无论我输入什么,该字段都存储为字符串。有没有一种很好的方法可以将我的存储值转换回null?
例如,我想检查我的代码,如下所示:
if (!sessionStorage.getItem('key')) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
进行该检查的最佳方法是什么?显而易见的方法是
if (!sessionStorage.getItem('key') !== "null") {
// do something
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有替代方案。
我正在制作一个网站,用户可以在其中选择尺寸或颜色等项目的选项。但是,我使用的是 Backbone,当模型更新时,视图会重新渲染,选项会重置为默认值。
为了阻止这种情况,我使用 sessionStorage 在刷新后重新加载值。这和我想要的一样有效,但是当有大量项目和数据要读取时,我担心性能。加载的值之间是否会有明显的延迟,或者 sessionStorage 是否足够快以至于这不是问题?
我创建了一个JSON对象并将其放在会话对象下.
如何从JSON中检索值?
这是我的计划
var datainsession = {"firstName":"John", "lastName":"Doe"};
var keyname = 'test';
window.sessionStorage.setItem(keyname + '', datainsession);
var val_sess = window.sessionStorage.getItem(keyname);
var firstname = val_sess.firstName;
alert(firstname);
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/5bea0mr2/3/
你能告诉我如何找回名字吗?
我正在 window.sessionStorage 中保存一些用户不敏感的数据。该数据特定于浏览器选项卡,现在我想从服务器端访问我存储在会话存储中的数据,我该怎么做。
无论出于何种原因,我无法重复此功能.一旦它获得了setTimeout,就会吐出"未被捕获的referenceerror:未定义getnumbers(其中getnumbers只是变量的名称).
$(document).ready(function(){
var getnumbers = {
countDigit: function(){
if (sessionStorage.counter=="NaN"){
sessionStorage.counter="0";
}
else {
sessionStorage.counter=Number(sessionStorage.counter)+1;
}
$("#result").text("counter: " +sessionStorage.counter);
setTimeout("getnumbers.countDigit()",3000);
},
_init: function(){
getnumbers.countDigit();
}
};
getnumbers._init();
})
具有讽刺意味的是,如果我刷新页面计数器是有效的,那么我知道它只是卡在那一行上.我能错过什么?
谢谢!
我正在努力访问 django 中的会话变量。
我有两个不同的应用程序custom_user 和article。在我的custom_user的views.py文件中,我声明了一个会话变量。
def auth_view(request):
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
request.session['email'] = user.email
return render_to_response(request, "loggedin.html", locals(),context_instance=RequestContext(request))
else:
return HttpResponseRedirect('/accounts/invalid')
Run Code Online (Sandbox Code Playgroud)
在我的文章应用程序的views.py中,我像这样访问它。
def articles(request):
return render_to_response('articles.html',
{'articles':Article.objects.all().order_by('-id'),'last':Article.objects.earliest('-pub_date'), 'loggedin':request.session.email})
Run Code Online (Sandbox Code Playgroud)
我的articles.html 文件继承了base.html 文件,并且我使用{{loggedin}} 来访问变量。我已经使用了 {{request.session.email}} 但这也不起作用
我最终想要做的是在我的导航栏中显示在我的网站上登录的用户的电子邮件地址(位于 base.html 文件中)。
我只获取在 auth_view 函数中呈现的loggedin.html 文件中的user.email 值。但不在任何其他 html 文件中。
我想弄清楚返回的setItem方法是什么sessionStorage.据我所知,以下代码返回undefined:
var set = sessionStorage.setItem('foo', 'bar');
console.log(set);
Run Code Online (Sandbox Code Playgroud)
我需要知道项目是否成功设置或是否失败.如何在不知道回报的情况下实现这一目标?
sessionstorage ×12
javascript ×10
html5 ×4
angular ×1
asp.net-mvc ×1
django ×1
html ×1
jasmine ×1
python ×1
session ×1