Javascript 如何在两个页面之间共享对象?

Javascript 如何在两个页面之间共享对象?,javascript,browser,Javascript,Browser,我编写了一个简单的JS脚本来创建一个只允许对一个实例进行序列化的对象。如果对象已被日化,则返回时不会再次重新创建它 这是我的:myobj.js var Singleton = { initialized : null, init: function(){ console.log("new obj..."); this.initialized = { 'status' : 'initialized' } }, getInstance

我编写了一个简单的JS脚本来创建一个只允许对一个实例进行序列化的对象。如果对象已被日化,则返回时不会再次重新创建它

这是我的:myobj.js

var Singleton = {

  initialized : null,

  init: function(){

    console.log("new obj...");

    this.initialized = {
      'status' : 'initialized'
    }

  },

  getInstance : function(){

    if (!this.initialized) this.init();

    return this.initialized;

  }

}
然后,我创建了一个test.html页面来测试此脚本:

<script src="myobj.js"></script>

<script>
var uno = Singleton.getInstance();
var due = Singleton.getInstance();

(uno===due) ? console.log("equals") : console.log("not equals");
</script>

var uno=Singleton.getInstance();
var due=Singleton.getInstance();
(uno==到期)?console.log(“等于”):console.log(“不等于”);
所有工作正常,只创建一个对象

我的问题是:我可以在更多HTML页面之间共享这个对象“Singleton”吗

不在不同的页面中重新创建它

如果(例如)在浏览器上打开了100个选项卡,我希望使用相同的对象,而不使用相同的100个对象


谢谢大家!

不,这是不可能的。不能在页面重新加载之间保留对象,也不能在不同的浏览器选项卡之间共享对象。有了cookies,你可以用这种方式存储一些简单的数据,但仅此而已。

现在可能没有办法,但不要完全放弃希望;也许很快就会有办法做到这一点。想要在页面之间共享JS对象有几个很好的理由,但我想到的其中一个原因是在许多WebWorkers之间共享大型对象

这里有两篇来自伯克利的关于这个主题的论文,从2010年开始,所以你可以看到,你不是唯一一个想要它的人

伯克利/谷歌:


伯克利/微软:

在撰写本文时,如果用户不安装任何东西,恐怕不可能跨所有浏览器。两个部分解决方案:

1) 使用浏览器扩展来存储状态

浏览器扩展可以通过主机浏览器的API与页面通信,并保持共享状态。但是,用户必须安装它们

2) 使用本地存储

这在同一域的页面之间共享,但只存储字符串。您可以使用JSON.stringify将对象转换为字符串并将其放置在localStorage上。

我不这么认为,因为浏览器中的每个页面都有自己的“沙盒”,无法访问客户端上的任何信息。唯一的可能是序列化你的singleton并将其放入cookie中,然后在加载到每个页面时反序列化,或者:在服务器端管理你的singleton并通过ajax或其他方式与服务器通信。@thomas,我必须设置一些在服务器有数据时调用的函数(comet通信)…因此此对象将具有函数和连接。我不想从每个页面连接到服务器…是否可以将序列化对象存储在服务器上,然后用ajax调用它,然后反序列化?序列化/反序列化的意思与显式创建单独副本完全相同-当您反序列化对象的序列化形式时,您将获得对象的副本。因此,这不会导致在多个页面中共享一个对象。这是一个老问题,但使用cookie如何?可能重复:此外,您可以使用
window.name
来创建。这称为“JavaScript会话”。(但是,我认为还不可能在已经打开的多个选项卡之间共享对象。)