2011-03-04 76 views
1

是否可以从所有浏览器窗口访问JavaScript对象? 有没有一个全局对象来存储数据?从所有浏览器窗口都可访问Javascript对象?

例如:我们希望将信息放置在多个打开或打开的窗口中的一个窗口中。

谢谢

+0

哪些页面将被允许读取/编辑该对象的数据...?如果您使用AJAX存储数据服务器端,这将是一个不同的情况,它已经在SO上得到了回答。 – 2011-03-04 13:00:17

+0

ajax对我们来说没有任何解决方案,因为我们使用了一个基于JavaScript的编辑器,它可以处理多个文件。 应该在同一个编辑器中打开从不同窗口打开的每个文件。 – felixsigl 2011-03-04 13:05:02

+0

所有在同一个域?需要支持哪些浏览器? – 2011-03-04 13:05:44

回答

1

您可以通过使用目标的window.open,“javascript:”将信息传递到目标窗口,如果它不存在,甚至可以初始化它。

例如: 您有一个页面“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

只要从另一个打开一个窗口,他们打开同一个域中的网页,他们可以互相访问。如果使用window.open方法,则会获得对新窗口的窗口对象的引用,并且新窗口中的window.opener属性指向它从中打开的窗口。

如果您打开浏览器的新实例,那么这些窗口是完全独立的,并且客户端脚本无法直接进行通信。即使您在同一个实例中的新窗口中打开该页面,也无法进行通信,因为它们不知道对方。

相关问题