模态对话框不与主 HTA 通信 window

Modal dialog box does not communicate with main HTA window

我在 HTA 中有一个 javascript,如下所示:

var result = null;
window.showModalDialog("dialog.hta", window, "dialogHeight:300px; dialogWidth:300px");
alert(result);

dialog.hta:

<html>
<head>
     <title>Dialog box</title>
     <meta http-equiv="MSThemeCompatible" content="yes"/>
</head>
<body style="background:#F0F0F0">
     <select id="colors">
          <option selected>Red</option>
          <option>Blue</option>
          <option>Green</option>
          <option>Yellow</option>
     </select><br/>
     <script type="text/javascript">
          function ok(){
               window.dialogArguments.result = colors.getElementsByTagName("option")[colors.selectedIndex].innerHTML;
               window.close();
          }
     </script>
     <button onclick="ok()">OK</button>
     <button onclick="window.close()">Cancel</button>
</body>
</html>

问题是,当我按下“确定”时,主 HTA window 中的 alert(result) 始终显示为空,即使我在模式对话框中单击“确定”按钮也是如此。 我该怎么做才能在按下确定按钮时显示用户在列表中选择的选项,而在按下取消按钮时显示为空?

模态对话框是这样工作的:

在主应用中:

// Call a dialog, and store the returned value to a variable
var result = showModalDialog(path, argument, options);

对话框关闭时:

// Set the returnValue
var elem = document.getElementById("colors");
window.returnValue = elem[elem.selectedIndex].text;
top.close();

在对话框中设置returnValue后,关闭对话框后可以从result读取。

option 元素在旧 IE 中没有 innerHTML,因此您必须使用 text 属性 代替。你也可以给select元素添加一个value属性,然后用简单的方法创建一个return值:

window.returnValue = document.getElementById('colors').value;