是否可以将对象写入浏览器cookie?

时间:2015-07-19 11:14:23

标签: javascript

我想将一个对象从一个窗口传递到另一个窗口,如果它是一个复杂的对象,它可以以某种方式写入cookie吗?或只打开保存到另一个窗口的链接?

var link = window.open('url');
link.myVar = myObj;

document.cookie.set('someVar', myObj);

在另一个窗口中:

document.cookie.get('someVar');

3 个答案:

答案 0 :(得分:1)

Cookie只能包含字符串。它们被设计为在HTTP头中传输。

您可以通过将它们编码为字符串来传递更复杂的数据结构(例如使用this),但是对另一个窗口的引用是不可能的。

答案 1 :(得分:1)

  

我想将一个对象从一个窗口传递到另一个窗口

你的代码在正确的轨道上,但是你试图让窗口过早地引用该对象。您可以等待它加载:

var link = window.open('url');
link.onload = function() {
    link.myVar = myOb;
};

load事件在这个过程中发生得相当晚,所以我可能会打开正在打开的窗口,尽快请求对象:

// In the window being opened:
var myVar = opener.obj;

我不是直接使用变量,而是使用函数来封装:

// In the window being opened:
var myVar = opener.getObject();

所有这些只适用于同源中的窗口,如果您正在考虑使用Cookie,我认为它们就是这样。如果窗口不在同一个原点,您也可以使用cross-window messaging

为了完整性:

  

可以将对象写入浏览器cookie吗?

Cookie只能包含字符串。您可以使用JSON.stringify或类似方法序列化对象,但我不会将cookie用于跨窗口消息传递。

答案 2 :(得分:-1)

你必须使用cookie吗? HTML5本地存储套件更好。

查看http://diveintohtml5.info/storage.html 这一个https://truongtx.me/2014/06/16/cross-tab-communication-using-html5-dom-storage/