是否有办法将全局数据存储在window
对象中,以便数据可以在页面重新加载/刷新后继续存在。所以我要说我分配我的全局数据/对象 -
window.myObject = myProductObject
用户刷新/重新加载页面或者可能会跳转到我网站的另一个页面。页面重新加载后window.myObject
是否仍然可用?
注意 - :我无法将对象存储在cookie中,因为它是一个对象,我的意思是它可能是对另一个自定义对象的引用,或者它可能引用另一个“窗口”对象通过“window.open”打开
答案 0 :(得分:5)
使用window.top.name
黑客
var data = window.top.name ? JSON.parse(window.top.name) : {}
...
window.top.name = JSON.stringify(data)
window.top.name
在页面加载中持续存在
我建议您使用lawnchair这样的抽象,而不是
答案 1 :(得分:3)
您可以将对象保存在Cookie中。但localStorage更好。类似于cookie,但你可以使用5Mb。
如果保存对象而不是字符串,则必须进行JSON编码/解码,但使用localStorage或cookie上的包装器很容易。
这是localStorage的一个非常简单的包装器(你有5Mb可用):
var Storage = {
set: function(key, value) {
localStorage[key] = JSON.stringify(value);
},
get: function(key) {
return localStorage[key] ? JSON.parse(localStorage[key]) : null;
}
};
你可以像这样使用它:
$(function() {
var defaultValue = {param1: 'value',counter: 0 },
myObj = Storage.get('myObj') || defaultValue; // get the obj from storage or create it with default values
$('body').html('counter: ' + myObj.counter);
myObj.counter+=1; // increment counter
Storage.set('myObj', myObj); // save it to localStorage
});
你可以在这个jsFiddle上试试:http://jsfiddle.net/guumaster/LytzA/3/
答案 2 :(得分:1)
您可以尝试将对象的字符串表示形式存储在cookie中,前提是该对象仅由值组成(无方法),例如
var foo = { a: "a", b: "b" };
document.cookie = "foo=" + JSON.stringify(foo);
这里有一个很好的cookie读者/作者示例 - https://developer.mozilla.org/en/DOM/document.cookie
答案 3 :(得分:1)
我不确定这个展会如何跨浏览器。我至少在兼容模式下使用chrome,firefox和IE9以及IE8 / 7工作,但是你会收到关于弹出窗口的警告。您可以检测弹出窗口是否被阻止,并且在为您的站点启用之前拒绝加载任何内容。见Detect blocked popup in Chrome
我正在使用jQuery绑定到beforeunload事件,您可以使用您首选的解决方案。
jQuery(function ($) {
$(window).bind('beforeunload', function () {
window.open("", "_savedata", "titlebar=0,width=100,height=100").saveData = window.saveData;
});
var store = window.open("", "_savedata");
window.saveData = store.saveData;
store.close();
});
示例:(刷新页面几次)
根据@Raynos的请求 - 持久关闭状态 - 你无法序列化(至少在firefox和chrome中运行,IE称之为安全问题,但可能与jsfiddle如何使用框架有关)< / p>
免责声明:我不保证这个解决方案的优雅。我只是对使用弹出窗口持久化对象状态感到好奇。将对象序列化为JSON并将其存储在客户端商店中要好得多(@Raynos会推荐草坪https://github.com/brianleroux/lawnchair/)。如果可以,您应该避免使用cookie,因为这些数据会被发布回服务器,这可能并不理想。
如果您的主要目标是持久引用弹出窗口,您可以通过为弹出窗口命名来实现此目的。这正是我持续引用我在刷新时创建的弹出窗口的方式。