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

时间:2011-06-18 12:35:05

标签: javascript browser

我编写了一个简单的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>

一切正常,只创建了一个对象。

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

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

如果我(例如)在浏览器上打开了100个标签,我想使用相同的对象,而没有相同的100个对象。

谢谢!

3 个答案:

答案 0 :(得分:2)

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

以下是伯克利关于这个话题的两篇论文,从2010年开始,所以你可以看到你并不是唯一一个想要它的人...

伯克利/谷歌:Object Views: Fine-Grained Sharing in Browsers

伯克利/微软:Secure Cooperative Sharing of JavaScript, Browser, and Physical Resources

答案 1 :(得分:2)

我担心在没有用户安装任何内容的情况下,在编写本文时所有浏览器都无法实现。两个部分解决方案:

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

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

2)使用LocalStorage

这是在同一域上的页面之间共享,但仅存储字符串。您可以使用JSON.stringify将对象转换为字符串并将其放在localStorage上。 http://diveintohtml5.info/storage.html

答案 2 :(得分:-1)

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