1

すべてのブラウザウィンドウからjavascriptオブジェクトにアクセスすることは可能ですか?データを保存するグローバルオブジェクトはありますか?

例:複数の開いたウィンドウまたは後で開いたウィンドウの情報を1つのウィンドウに入れたいとします。

ありがとうございました

4

3 に答える 3

2

あるウィンドウが別のウィンドウから開かれ、同じドメイン内のページを開いている限り、それらは相互にアクセスできます。このメソッドを使用するwindow.openと、新しいウィンドウのウィンドウオブジェクトへの参照が取得window.openerされ、新しいウィンドウのプロパティは、ウィンドウが開かれた場所からのウィンドウを指します。

ブラウザの新しいインスタンスを開くと、ウィンドウは完全に分離され、クライアントスクリプトが直接通信する方法はありません。同じインスタンスで新しいウィンドウでページを開いても、お互いを認識していないため、通信できません。

于 2011-03-04T13:05:15.130 に答える
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"
);

setTimeoutは、起動時に「window.location.href」プロパティを取得したため、chromにのみ必要です。

于 2011-03-07T11:26:15.750 に答える
0

最新のブラウザをターゲットにしている場合は、HTML5ストレージを使用できます。 http://www.quirksmode.org/blog/archives/2009/06/html5_storage_t.html

@Guffaが言ったように、ストレージがなくても親ウィンドウと子ウィンドウの間で簡単に通信できます。

于 2011-03-04T13:11:01.343 に答える