すべてのブラウザウィンドウからjavascriptオブジェクトにアクセスすることは可能ですか?データを保存するグローバルオブジェクトはありますか?
例:複数の開いたウィンドウまたは後で開いたウィンドウの情報を1つのウィンドウに入れたいとします。
ありがとうございました
すべてのブラウザウィンドウからjavascriptオブジェクトにアクセスすることは可能ですか?データを保存するグローバルオブジェクトはありますか?
例:複数の開いたウィンドウまたは後で開いたウィンドウの情報を1つのウィンドウに入れたいとします。
ありがとうございました
あるウィンドウが別のウィンドウから開かれ、同じドメイン内のページを開いている限り、それらは相互にアクセスできます。このメソッドを使用するwindow.open
と、新しいウィンドウのウィンドウオブジェクトへの参照が取得window.opener
され、新しいウィンドウのプロパティは、ウィンドウが開かれた場所からのウィンドウを指します。
ブラウザの新しいインスタンスを開くと、ウィンドウは完全に分離され、クライアントスクリプトが直接通信する方法はありません。同じインスタンスで新しいウィンドウでページを開いても、お互いを認識していないため、通信できません。
情報は、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にのみ必要です。
最新のブラウザをターゲットにしている場合は、HTML5ストレージを使用できます。 http://www.quirksmode.org/blog/archives/2009/06/html5_storage_t.html
@Guffaが言ったように、ストレージがなくても親ウィンドウと子ウィンドウの間で簡単に通信できます。