我编写了一个简单的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个对象。
谢谢!
答案 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,您可以通过这种方式存储一些简单的数据,但仅此而已。