我想将一个对象从一个窗口传递到另一个窗口,如果它是一个复杂的对象,它可以以某种方式写入cookie吗?或只打开保存到另一个窗口的链接?
var link = window.open('url');
link.myVar = myObj;
或
document.cookie.set('someVar', myObj);
在另一个窗口中:
document.cookie.get('someVar');
答案 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/