【Web】同じ名前の画面を呼び出した時の動作について

window.openを利用して別画面を表示させることは結構あると思うのですが、
呼び出した画面(以下、子画面)から呼び出し元画面(以下、親画面)の値を
JavaScriptで書き換える時の動作がIEとChromeとで動作が異なっていました。

動作条件としては少し特殊なのですが、下記の2つです。

  • 複数の画面から子画面を呼び出す
  • 子画面の名前は同じ(呼び出す度に子画面は更新される)

動作の違いについては下記の通りです。

ブラウザ JavaScriptで子画面から親画面の値を
変更した時の動作内容
IE 一番最初に子画面を開いた親画面の値が書き換わる
Chrome 一番最後に子画面を開いた親画面の値が書き換わる

動作的にはChrome側の動きの方がしっくりと来るのですが、
EDGEでも動作は同じだったので仕様みたいですね。

基本的には呼び出し時に別々な名前を子画面につけて
子画面を複数表示できるようにした方がいいですが、
どうしてもという場合は気をつけたほうが良さそうですね。

動作確認用のサンプルソースは↓です。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script type="text/javascript">
			function openWindow() {
				// 高さと幅を指定
				var width  = 300;
				var height = 300;
				// スクロールバーの有無を設定
				var scrollbar = 1;
				var original_action = document.forms[0].action;
				// サブが麺を表示する
				var subWnd = window.open('about:blank', 'subWindwow', 'width='+ width + ',height=' + height + ',menubar=0,toolbar=0,location=0,directories=0,status=0,scrollbars=' + scrollbar + ',resizable=1');

				// 各種操作
				document.forms[0].target = 'subWindwow';
				document.forms[0].action = 'subWindow.html';
				document.forms[0].submit();
				document.forms[0].target = '_self';
				document.forms[0].action = original_action;
			}
		</script>
	</head>

	<body>
		<form method="post">
			<!-- 変更確認用 -->
			<input type="text" value="" name="outputTextBox" disabled="disabled">
			<!-- サブ画面表示用 -->
			<input type="button" value="サブ画面表示" onclick="openWindow()">
		</form>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script type="text/javascript">
			function changeValueParentWindow() {
				// 呼び出し元画面のテキストボックスの値を変更する
				var parentWnd = window.opener.document.forms[0].outputTextBox;
				parentWnd.value = "変更!";
			}
		</script>
	</head>
	<body>
		<!-- 変更ボタン -->
		<form method="post">
			<input type="button" value="呼び出し元画面 値変更" onclick="changeValueParentWindow()">
		</form>
	</body>
</html>

Web系の仕事をやり始めて色々と気付く_(:3」∠)_

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です