是否可以从所有浏览器窗口访问javascript对象? 是否有一个全局对象来存储数据?
例如:我们希望将信息放在多个打开或以后打开的窗口的一个窗口中。
谢谢
答案 0 :(得分:2)
只要一个窗口从另一个窗口打开,并且它们在同一个域中打开页面,它们就可以相互访问。如果使用window.open
方法,则会获得对新窗口的窗口对象的引用,并且新窗口中的window.opener
属性指向打开它的窗口。
如果您打开浏览器的新实例,则窗口是完全独立的,客户端脚本无法直接进行通信。即使您在同一个实例中的新窗口中打开页面,它们也无法进行通信,因为它们彼此不了解。
答案 1 :(得分:1)
您可以通过window.open,“javascript:”使用target将信息传递到目标窗口,如果它不存在,甚至可以初始化它。
例如: 你有一个页面“mypage.html”和一个javascript对象myObject,并希望从浏览器的任何窗口传递信息foo ='hello'。
mypage.html:
....
var myObject = {
qs = {},
init: function()
var b = window.location.href.split("?");
if(b.length > 1){
var p = b[1].split("&");
for(var i = 0; i < p.length; i++){
var c = p[i].split("=");
qs[c[0]] = c[1];
}
}
this.doFoo();
},
doFoo: function(){
var foo = this.qs.foo;
....
}
...
};
myObject.init();
...
调用html:
window.open(
'javascript:if(typeof(myObject) == "undefined"){'
+ 'setTimeout(\'window.location.href = "mypage.html?foo=hello"\', 10);}'
+ 'else{myObject.qs={}; myObject.qs.foo="hello"; myObject.doFoo();}'
, "mypage"
);
只有chrom需要setTimeout,因为他在启动时没有得到“window.location.href”属性。
答案 2 :(得分:0)
如果您定位现代浏览器,则可以使用HTML 5存储。 http://www.quirksmode.org/blog/archives/2009/06/html5_storage_t.html
并且正如@Guffa所说,您可以在父窗口和子窗口之间进行通信 即使没有存储也很容易。