【JavaScript】showModalDialogをwindow.openに変更する

showModalDialogをwindow.openに変更する

今回使用した環境

64 ビット オペレーティング システム

Windows 10 21H2

Google Chrome 106.0.5249.119

背景

Internet Explorer では使用できた「showModalDialog」も Google Chrome では使用できません。

もう既に Internet Explorer のサポートは、2022年6月15日に終了していますが、まだイントラネットオフライン環境の端末には Internet Explorer が使用されているところもあります。

ただ端末を更改するにあたり、もう Google Chrome や Microsoft Edge などのモダンブラウザに移行せざるを得ない場合がありますね。

その移行にあたり様々な影響があると思いますが、その影響の中のひとつに「showModalDialog」が使えないということがあります。

この記事では「showModalDialog」を使ってメイン画面からサブ画面を呼び出し、サブ画面からメイン画面に対して値を返すという動きを「window.open」で作ってみます。

ソースコード

「main.html」です。ボタンクリック時にサブ画面を呼び出します。

※window.openは「subwindow.js」に書かれています。サブ画面は部品化させるのが目的で別のjsファイルにしています。

<html>
<head>
  <script src="subwindow.js">
  </script>
</head>
<body>
  <input type="button" value="サブ画面呼出"
   onclick="openSub('hinmeiCd', 'hinmei');" /><br />
  品名コード
  <input type="text" id="hinmeiCd" /><br />
  品名
  <input type="text" id="hinmei" />
</body>
</html>

「sub.html」です。ボタンクリック時にメイン画面側に値をセットし、自分自身を閉じます。

<html>
<head>
  <script type="text/javascript">
    function closeSub() {
      var returnValue = {
        hinmeiCd: document.getElementById("hinmeiCd").value,
        hinmei: document.getElementById("hinmei").value
      };
      window.opener.setHinmei(returnValue);
      window.close();
    }
  </script>
</head>
<body>
  <input type="button" value="メイン画面に値返却"
   onclick="closeSub();"><br />
  品名コード
  <input type="text" id="hinmeiCd" value="J001"><br />
  品名
  <input type="text" id="hinmei" value="じゃがいも">
</body>
</html>

「subwindow.js」です。引数の hinmeiCdId, hinmeiId があるのはメイン画面側でId名が統一されていない(できない)パターンがあるかもしれないのでそこを考慮しています。

function openSub(hinmeiCdId, hinmeiId) {
  window.setHinmei = function(returnValue) {
    document.getElementById(hinmeiCdId).value = returnValue.hinmeiCd;
    document.getElementById(hinmeiId).value = returnValue.hinmei;
  }
  window.open("sub.html", "", "width=400,height=200");
}

動作確認

「サブ画面呼出」のボタンをクリックすることで、「sub.html」のサブ画面が表示されました。そして、サブ画面上で「メイン画面に値返却」のボタンをクリックすることで…。

サブ画面が閉じられ、メイン画面に値がセットされました。

以上となります。

ここまでお読みいただきありがとうございました。

JavaScript

Posted by だゆう