1

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

例如:我们想将多个打开或以后打开的窗口中的信息放在一个窗口中。

谢谢

4

3 回答 3

2

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

如果您打开一个新的浏览器实例,那么窗口是完全独立的,客户端脚本无法直接通信。即使您在同一实例中在新窗口中打开页面,它们也无法通信,因为它们彼此不了解。

于 2011-03-04T13:05:15.130 回答
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”属性。

于 2011-03-07T11:26:15.750 回答
0

如果您的目标是现代浏览器,则可以使用 HTML 5 存储。 http://www.quirksmode.org/blog/archives/2009/06/html5_storage_t.html

正如@Guffa 所说,即使没有存储,您也可以轻松地在父窗口和子窗口之间进行通信。

于 2011-03-04T13:11:01.343 回答