孫画面から親・子画面へアクセスする方法についてよく知らなかったので、
色々と試してみました。
親画面ソース
子画面、孫画面を開いた時に変数childWindowと変数grandChildWindowに対してWindow情報をセットする感じです。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WindowTest</title>
<script type="text/javascript">
// 子画面
var childWindow = null;
// 孫画面
var grandChildWindow = null;
// サブウィンドウ表示
function openSubWindow() {
window.open("subWindow.html", "subWindow");
}
// サブ画面から実行
function actionFromSubWindow() {
alert("サブ画面から実行");
return 1;
}
// 子画面にアラート表示
function actionChildWindow() {
if (childWindow != null) {;
childWindow.alert("親画面から実行");
}
}
// 孫画面にアラート表示
function actionGrandChildWindow() {
if (grandChildWindow != null) {
grandChildWindow.alert("親画面から実行");
}
}
</script>
</head>
<body>
<h1>MainPage</h1>
<input type="button" onclick="openSubWindow();" value="OpenWindow">
<input type="button" onclick="actionChildWindow();" value="FocusChildWindow">
<input type="button" onclick="actionGrandChildWindow();" value="FocusGrandChildWindow">
</body>
</html>
子画面ソース
親画面の使いまわしです。
閉じた時の処理なども追加した方がいいかもです。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SubWindow</title>
<script type="text/javascript">
var mainWindowInfo = null;
var subWindowInfo = null;
// 読み込み時にメイン画面の情報をセットする
window.onload = function() {
if (window.opener != null) {
mainWindowInfo = window.opener;
}
}
// サブウィンドウ表示
function openSubWindow() {
subWindowInfo = window.open("subWindow2.html", "subWindow2");
}
// サブ画面から実行
function actionFromSubWindow() {
alert("サブ画面から実行");
return 2;
}
</script>
</head>
<body>
<h1>SubPage</h1>
<input type="button" onclick="openSubWindow();" value="OpenWindow">
</body>
</html>
孫画面ソース
親画面、子画面に対して処理を実行するコードを書いています。
一応、IE、Edge、Chrome、FFの最新版で試して実行できたので問題ないかと…。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SubWindow</title>
<script type="text/javascript">
// 呼び出し元の画面を保持する
var mainWindowInfo = null;
// 読み込み時にメイン画面の情報をセットする
window.onload = function() {
if (window.opener != null && window.opener.opener != null) {
window.opener.opener.grandChildWindow = window;
mainWindowInfo = window.opener.opener;
}
}
// サブ画面から実行
function actionFromSubWindow() {
var subWindow = window.opener;
// サブ画面での処理を実行
if (subWindow != null){
var res = subWindow.actionFromSubWindow();
}
// メイン画面での処理を実行
if (mainWindowInfo != null){
var res = mainWindowInfo.actionFromSubWindow();
}
return false;
}
</script>
</head>
<body>
<h1>SubPage2</h1>
<input type="button" onclick="actionFromSubWindow();" value="ActionButton">
</body>
</html>
HTML5の資格をみたい今日このごろ。

