`
clyde617929
  • 浏览: 23391 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

showModalDialog和showModelessDialog使用心得

阅读更多
 

Javascript有许多内建的方法来产生对话框,如:window.alert(), window.confirm(),window.prompt().等。 然而IE提供更多的方法支持对话框。如:

  showModalDialog() (IE 4+ 支持)
  showModelessDialog() (IE 5+ 支持)


 window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框,由于是对话框,因此它并没有一般用window.open()打开的窗口的所有属性。
 window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。

 当我们用showModelessDialog()打开窗口时,不必用window.close()去关闭它,当以非模态方式[IE5]打开时, 打开对话框的窗口仍可以进行其他的操作,即对话框不总是最上面的焦点,当打开它的窗口URL改变时,它自动关闭。而模态[IE4]方式的对话框始终有焦点(焦点不可移走,直到它关闭)。模态对话框和打开它的窗口相联系,因此我们打开另外的窗口时,他们的链接关系依然保存,并且隐藏在活动窗口的下面。

使用方法如下:
 vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])
 vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures])
参数说明:
 sURL
 必选参数,类型:字符串。用来指定对话框要显示的文档的URL。
 vArguments
 可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。
 sFeatures
 可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。
  dialogHeight 对话框高度,不小于100px,IE4中dialogHeight 和 dialogWidth 默认的单位是em,而IE5中是px,为方便其见,在定义modal方式的对话框时,用px做单位。
   dialogWidth: 对话框宽度。
   dialogLeft: 距离桌面左的距离。
   dialogTop: 离桌面上的距离。
   center: {yes | no | 1 | 0 }:窗口是否居中,默认yes,但仍可以指定高度和宽度。
   help: {yes | no | 1 | 0 }:是否显示帮助按钮,默认yes。
   resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改变大小。默认no。
   status: {yes | no | 1 | 0 } [IE5+]:是否显示状态栏。默认为yes[ Modeless]或no[Modal]。
  scroll:{ yes | no | 1 | 0 | on | off }:指明对话框是否显示滚动条。默认为yes。

  还有几个属性是用在HTA中的,在一般的网页中一般不使用。
  dialogHide:{ yes | no | 1 | 0 | on | off }:在打印或者打印预览时对话框是否隐藏。默认为no。
  edge:{ sunken | raised }:指明对话框的边框样式。默认为raised。
  unadorned:{ yes | no | 1 | 0 | on | off }:默认为no。

 传入参数:
 要想对话框传递参数,是通过vArguments来进行传递的。类型不限制,对于字符串类型,最大为4096个字符。也可以传递对象,例如:

 test1.htm
 ====================
 <script>
  var mxh1 = new Array("mxh","net_lover","孟子E章")
  var mxh2 = window.open("about:blank","window_mxh")
  // 向对话框传递数组
  window.showModalDialog("test2.htm",mxh1)
  // 向对话框传递window对象
  window.showModalDialog("test3.htm",mxh2)
 </script>

 test2.htm
 ====================
 <script>
  var a = window.dialogArguments
  alert("您传递的参数为:" + a)
 </script>

 test3.htm
 ====================
 <script>
  var a = window.dialogArguments
  alert("您传递的参数为window对象,名称:" + a.name)
 </script>

 可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象。例如:

 test4.htm
 ===================
 <script>
  var a = window.showModalDialog("test5.htm")
  for(i=0;i<a.length;i++) alert(a[i])
 </script>

 test5.htm
 ===================
 <script>
 function sendTo()
 {
  var a=new Array("a","b")
  window.returnValue = a
  window.close()
 }
 </script>
 <body>
 <form>
  <input value="返回" type=button onclick="sendTo()">
 </form>

 常见问题:
 1,如何在模态对话框中进行提交而不新开窗口?
 如果你 的 浏览器是IE5.5+,可以在对话框中使用带name属性的iframe,提交时可以制定target为该iframe的name。对于IE4+,你可以用高度为0的frame来作:例子,

 test6.htm
 ===================
 <script>
  window.showModalDialog("test7.htm")
 </script>

 test7.htm
 ===================
 if(window.location.search) alert(window.location.search)
 <frameset rows="0,*">
  <frame src="about:blank">
  <frame src="test8.htm">
 </frameset>

 test8.htm
 ===================
 <form target="_self" method="get">
 <input name=txt value="test">
 <input type=submit>
 </form>
 <script>
 if(window.location.search) alert(window.location.search)
 </script>
 2,可以通过http://servername/virtualdirname/test.htm?name=mxh方式直接向对话框传递参数吗?
 答案是不能。但在frame里是可以的。

pWindow = showModelessDialog("components/inspector.htm",[window,curObj],"dialogWidth:395px;dialogHeight:227px;dialogLeft:400;dialogTop:200;help:no;status:no;scroll:no;resizable:yes");
..
..
..
function sTarResizeCw(width,height){
 pWindow.dialogLeft = pWindow.dialogLeft;//为了保持位置不变,否则默认还原到打开时候的 center=yes
 pWindow.dialogTop = pWindow.dialogTop; //结果失败了,:(  继续中找资料中.....
 pWindow.dialogWidth = width+"px";
 pWindow.dialogHeight = height+"px";
}

pWindow 是返回值,不是窗口对象,因此不能象一般用window.open打开的窗口那样进行操作。模态对话框的属性是在打开时设置的

对于showModalDialog()得交弹出新网页的解决方法:
showModalDialog()是不能够提交给自己的,得交给自己的话就会有新页面产生,所以你要指写form里的target等于一个值。

showModalDialog()里:
<form target=meizz action=aa.asp ...>

在主页面里加一个隐藏的iframe浮动框架:
<iframe name=meizz width=0 height=0 frameborder=0 style="display: none"><iframe>
这样提交就不会有新的页面产生了。
  JavaScript支持几种内建的对话框:window.alert()、window.confirm()以及window.prompt()。当弹出一个对话框时,用户就不可以再聚焦到初始页面,除非对话框操作结束。换言之,对话框永远是被聚焦的。Internet Explorer支持一些方法,使用它们能让你在任何新窗口上应用它们:

  showModalDialog() (Internet Explorer 4 和以上版本)

  showModelessDialog() (Internet Explorer 5 和以上版本)

  以下是这些方法的语法:

  vReturnValue = window.showModalDialog(sURL[, vArguments][, sFeatures]);

  vReturnValue = window.showModelessDialog(sURL[, vArguments][, sFeatures]);

  第1个参数是一个字符串,它指定了在新窗口中装载并显示的文档URL。第2个参数,vArguments,是一个variant,它指定了显示文档的命令。使用这个参数时,可以传递任意类型的数组或者数值。对话框能够从window对象的dialogArguments属性中将数值传递给调用者。

  当通过其中一个方法打开一个新窗口时,新窗口(对话框)的window对象特写了dialogArguments属性,它包含了分配给调用方法的vArguments参数的数值。来看看下面的语句:

  window.showModalDialog("modalurl.html", window);

  注意,第2个命令参数实际上是当前浏览器窗口的window对象。下面是文件modalurl.html的代码:

  <HTML>

  <HEAD>

  <TITLE>Change the URL</TITLE>

  <SCRIPT LANGUAGE="JavaScript">

  <!--

  function load(menu) {

   if (window.dialogArguments && dialogArguments.location) {

    dialogArguments.location.href = menu.options[menu.selectedIndex].value;

    window.close();

   }

  }

  // -->

  </SCRIPT>

  </HEAD>

  <BODY>

  Pick your favorite investment site:<P>

  <FORM><SELECT NAME="menu">

  <OPTION VALUE="http://www.fool.com/">Fool.com (The Motley Fool)

  <OPTION VALUE="http://www.investor.com/">MoneyCentral Investor

  <OPTION VALUE="http://www.thestreet.com/">TheStreet.com

  </SELECT>

  <INPUT TYPE="button" VALUE="Load" onClick="load(this.form.menu)"></FORM>

  </BODY>

  </HTML>

  当用户在对话框中点击“Load”按钮,打开者窗口的URL就变为选择的数值。为了数值窗口文档的URL,我们必须分配一个数值给需要window对象的location.href属性。在这里,我们指定调用者的window对象做为showModalDialog()方法的第2个参数,所以,新窗口(对话框)中dialogArguments属性就对应于调用者的window对象。

  注意函数开始的对象检测程序段。因为dialogArguments属性只存在于由showModalDialog()和showModelessDialog()方法创建的窗口中,所以,我们必须确认在使用它们前这个属性是否存在。而且,我们需要查找一个location.href属性来确认dialogArguments属性真正地对应于一个合法的window对象。

  load()函数的最后语句关闭对话框,从而指定的文档能够在原始窗口被装载。注意,如果我们使用showModelessDialog()方法替代showModalDialog()方法,我们就不需要特别地关闭窗口,因为,即使对话框仍然打开时,新的URL依然会在下面的窗口(打开者)被装载。在这里,当调用者的URL改变时(调用新页面),对话框自动关闭。  当在Internet Explorer 5中执行showModelessDialog()时,出现一个对话框,它位于浏览器窗口前面。用户仍旧可以操纵下面的窗口,但是对话框会始终在上面。对话框与打开它的浏览器窗口相关联,所以,如果用户产生了一个不同的窗口,对话框与它的产生者一同被隐藏在后面。注意,一个modeless对话框实际上连接到一个包含产生它的脚本的文档,所以,如果用户在打开者窗口中装载另一个不同的URL,对话框将自动关闭。

  Internet Explorer 4 中的showModalDialog()方法就完全不同。它建立一个modal对话框,并一直保持焦点直到被关闭。用户根本不能访问到打开者窗口。一个modal对话框与打开它的浏览器窗口相关联,所以,如果用户产生一个不同的浏览器窗口,对话框就与它的原始窗口一起被隐藏在活动窗口的下面。

  现在是回来讨论showModalDialog()和showModelessDialog()方法的参数的时候了。第3个参数,sFeatures,是一个字符串,它指定了对话框窗口的修饰特征,具体就是使用下面的一个或者多个以逗号分隔的数值:

  dialogHeight: iHeight

  设置对话框窗口的高度。尽管用户能够手工地调整一个对话框的高度为一个较小数值(要求产生的对话框是大小可变的),但是你可以指定的最小dialogHeight是100象素(pixels)。注意,在Internet Explorer 4.0中dialogHeight和dialogWidth的默认测量单位“em”,而在Internet Explorer 5中则是px(象素)。为了保持一致性,当设计modal对话框时,请以象素为单位指定dialogHeight和dialogWidth。

  dialogWidth: iWidth

  设置对话框窗口的宽度。

  dialogLeft: iXPos

  设置对话框窗口相对于桌面左上角的left位置。

  dialogTop: iYPos

  设置对话框窗口相对于桌面左上角的top位置。

  center: {yes | no | 1 | 0 }

  指定是否将对话框在桌面上居中,默认值是“yes”。为了避免居中,你可以设定为dialogLeft或者dialogTop。

  help: {yes | no | 1 | 0 }

  指定对话框窗口中是否显示上下文敏感的帮助图标。默认值是“yes”。

  resizable: {yes | no | 1 | 0 } (Internet Explorer 5 and above)

  指定是否对话框窗口大小可变。默认值是“no”。

  status: {yes | no | 1 | 0 } (Internet Explorer 5 和以上版本)

  指定对话框窗口是否显示状态栏。对于非依赖对话框窗口,默认值是“yes”;对于依赖对话框窗口,默认值是 “no”。

对象检测
  showModalDialog() 和 showModelessDialog() 方法并非被所有支持JavaScript的浏览器所支持。在调用任何一个方法之前,我们必须确认它们的有效性:

  if (window.showModalDialog) {

   ...

  }

  if (window.showModelessDialog) {

   ...

  }

  如果用户的浏览器不能支持需要的方法,你也许希望考虑一个可供选择的行为,这可以通过调用window.open()方法来实现:

  if (window.showModalDialog) {

   win = window.showModalDialog("mydialog.html", ...);

  } else {

   win = window.open("mydialog.html", ...);

  }

一个交叉浏览器Modal对话框
  看看下面的定义 (Navigator适用):

  <BODY onBlur="window.focus()">

  如果你在< body >标记中使用上面的事件处理程序,那么包含文档的窗口就会被聚焦,直到用户关闭它。在这个仅Navigator适用的技术与Internet Explorer的showModalDialog()方法之间,有些区别。被聚焦的窗口没有与指定的窗口或者文档相关联。就是说,用户不能调上来其它浏览器窗口,即使不是打开对话框的窗口。

我们知道,对话框一般分为两种类型:模态类型(modal)与非模态类型(modeless)。所谓模态对话框,就是指除非采取有效的关闭手段,用户的鼠标焦点或者输入光标将一直停留在其上的对话框。非模态对话框则不会强制此种特性,用户可以在当前对话框以及其他窗口间进行切换。本文介绍如何使用JavaScript语言来创建这两种类型的对话框、控制其大小和位置、改变其外观以及在对话框间的数据传递。
本文的所有例程中,从层次上涉及到2个HTML页面。我们把第一个页面叫做caller页面,第二个页面叫做callee页面。也就是说,在caller页面执行代码创建生成callee页面。
一、创建模态和非模态对话框
首先,我们举个例子来快速了解一下什么是模态与非模态。在caller.htm中,我们输入以下代码:
<INPUT TYPE="button" VALUE="创建模态对话框" onclick="fnOpenModal()">
<br><br>
<INPUT TYPE="button" VALUE="创建非模态对话框" onclick="fnOpenModeless()">
<script language="javascript">
function fnOpenModal(){
window.showModalDialog("callee.htm")
}
function fnOpenModeless(){
window.showModelessDialog("callee.htm")
}
</script>
在浏览器中打开caller.htm,点击“创建模态对话框”按钮,将会出现一个对话框窗口,其中的内容是callee.htm。你会看到,除了关闭这个新窗口,无论怎样我们也不能将其他的窗口设置为“当前活动”窗口,这个一直是活动状态的窗口类型就是模态类型。关闭这个模态对话框,回到caller.htm页面,点击“创建非模态对话框”,出现一个包含callee.htm页面的对话框窗口。这回有所不同,鼠标可以转移到其他地方使另外的窗口成为“当前活动”状态,这就是非模态的概念。
接下来,我们看看创建模态对话框与非模态对话框的相关语法:
创建模态对话框:
vReturnValue = window.showModalDialog(sURL [, vFreeArgument] [, sOrnaments]);
创建非模态对话框:
vReturnValue = window.showModelessDialog(sURL [, vFreeArgument] [, sOrnaments]);
从上面的语法我们得知:除了名字有所区别外,参数种类与含义都相同。以

二、控制对话框大小和位置
控制对话框的大小和位置涉及到5个方面:高度(dialogHeight)、宽度(dialogWidth)、相对于桌面左上角的x坐标(dialogLeft)、y坐标(dialogTop)以及是否让对话框窗口居中(center)。由于不同版本的Internet Explorer浏览器处理的默认度量单位并非一致,所以我们在指定高度、宽度等大小时,最好是同时设置好单位。单位种类包括很多,比如cm、mm、in、pt、pc、px。请注意:最小的高度值是100px。
下面的代码将打开一个高200px、宽800px的对话框:
window.showModalDialog('callee.htm','','dialogHeight:200px;dialogWidth:800px');
我们注意到,打开的新窗口会在桌面中处于居中的位置,这也正是居中属性(center)的默认值。居中属性(center)的可取值包括yes、no、1、0、on和off,含义一目了然。执行以下代码,看看关闭居中属性后新窗口的位置:
window.showModalDialog('callee.htm','','dialogHeight:200px;dialogWidth:800px;center:no');
我们看到,新窗口紧挨者桌面的左上角打开。当然,我们可以使用dialogLeft和dialogTop 属性来精确定义新窗口的打开位置。下面的代码将在相对于桌面左上角的x位置300px和y位置500px处打开新窗口:
window.showModalDialog('callee.htm','','dialogHeight:200px;dialogWidth:800px;dialogLeft:300;
dialogTop:500')
注意,即使指定了居中属性,但如果同时设置了dialogLeft和dialogTop属性值,那么窗口位置将遵从后者。试一试执行下面的代码:
window.showModalDialog('callee.htm','','dialogHeight:200px;dialogWidth:800px;dialogLeft:300;
dialogTop:500;center:yes')
三、改变对话框外观
对话框的外观控制包括从窗口边缘风格(edge)、是否存在滚动条(scroll)、是否包含上下文关联提示图标(help)、是否显示状态栏(status)以及是否可以改变窗口大小(resizable)等方面。默认情况下,新打开的窗口是大小不可改变的、边缘风格为凸起、在新窗口右上角显示一个上下文关联提示图标、存在滚动条,比如:
 
 
edge的可取值为sunken(凹陷)和raised(凸起),status、help、resizeable和scroll的可取值都是yes、no、1、0、on和off,其含义一目了然。
下面的代码将去除上下文关联提示图标、不显示状态栏、窗口边缘风格为凹陷:
showModelessDialog("callee.htm","","status:0;help:0;edge:sunken");
执行后,图示如下:
 
 
四、从caller页面传递数据到callee页面
上面我们介绍了创建模态和非模态窗口的语法以及如何控制新窗口的大小、位置和外观,接下来我们研究一下实际应用中更实用的功能:如何从caller页面传递数据到callee页面。
从caller页面传递给callee页面的数据分为3类:传递值、传递数组引用以及传递对象,它们都是通过showModalDialog()和showModelessDialog()的第2个参数实现的。
(一)传递值类型数据
在caller.htm页面中输入以下代码:
<INPUT TYPE="button" VALUE="创建模态对话框" onclick="fnOpenModal()">
<br><br>
<INPUT TYPE="button" VALUE="创建非模态对话框" onclick="fnOpenModeless()">
<script language="javascript">
<!--
function fnOpenModal(){
window.showModalDialog("callee.htm","打开了一个新模态窗口")
}
function fnOpenModeless(){
window.showModelessDialog("callee.htm","打开了一个新非模态窗口")
}
// -->
</script>
在callee.htm页面中输入以下代码:
<SCRIPT LANGUAGE="JavaScript">
<!--
alert(dialogArguments);
// -->
</SCRIPT>
在浏览器中打开caller.htm,点击任意一个按钮,我们将首先看到如下的提示信息框:
 
 
 
然后才出现新窗口。这种情况下,callee.htm页面中的window对象的属性dialogArguments将对应于caller.htm页面中的"打开了一个新模态窗口"或者"打开了一个新非模态窗口"。如果直接打开callee.htm,将会出现错误提示。
(二)传递数组引用类型数据
第一种值类型数据的传递中,在callee.htm页面中只能读取caller.htm页面的传递数据。当需要对caller.htm页面的传递内容进行修改时,就需使用到数组引用类型的传递方式。
首先,在caller.htm页面中输入以下代码:
<INPUT TYPE="button" VALUE="创建模态对话框" onclick="fnOpenModal()">
<br><br>
<INPUT TYPE="button" VALUE="创建非模态对话框" onclick="fnOpenModeless()">
<script language="javascript">
<!--
var a = new Array;
a[0]="first";
a[1]="second";
a[2]="third";
function fnOpenModal(){
window.showModalDialog("callee.htm",a)
}
function fnOpenModeless(){
window.showModelessDialog("callee.htm",a)
}
// -->
</script>
然后在callee.htm页面中输入以下代码:
<SCRIPT LANGUAGE="JavaScript">
<!--
a = dialogArguments;
alert(a);
a[0] = "fourth";
// -->
</SCRIPT>
最后,在浏览器中打开caller.htm,点击任意一个按钮,我们将首先看到如下的对话框:
 
 
接着关闭这个对话框以及新打开的窗口,再次点击一个按钮,又出现一个对话框:
 
 
从运行结果我们看到,在caller.htm页面中通过对数组a的地址引用,就可以实现在callee.htm中修改数组a的内容。
注意在callee.htm中要首先建立对传递数据的附值:a = dialogArguments。
(三)传递对象类型数据
在caller.htm和callee.htm中传递数据的最有效方式是通过对象方式进行,这不仅能实现从caller.htm到callee.htm的传递,还能从callee.htm传递到caller.htm。而且,我们还可以在caller.htm中定义对象的方法,再在callee.htm中使用它们。实际上,我们可以将caller.htm的window对象传递给callee.htm,这样就可以在callee.htm中访问caller.htm的变量及函数。
来看看一个实际的例子。在caller.htm中输入以下代码:
<HTML>
<HEAD>
<TITLE>传递对象数据</TITLE>
<SCRIPT>
var sColor=""; 
function callDialog() {
showModelessDialog("callee.html",window,"status:false;dialogWidth:300px;dialogHeight:150px");
}
function update()
{
oColor.innerText = sColor;
}
</SCRIPT>
</HEAD>
<BODY>
<P>输入你最喜欢的颜色: <SPAN ID="oColor" STYLE="color:red;font-size:24">Yellow</SPAN></P> 
<INPUT TYPE="button" VALUE="Display Modeless Dialog" onclick="callDialog()">
</BODY>
</HTML>
在callee.htm中输入以下代码:
<HTML>
<HEAD>
<TITLE>callee.html</TITLE>
<SCRIPT>
function getInfoAndUpdate() {
var callerWindowObj = dialogArguments;
callerWindowObj.sColor = oEnterColor.value;
callerWindowObj.update();
}
function cancel() {
var callerWindowObj = dialogArguments;
callerWindowObj.sColor = "Yellow";
callerWindowObj.update(); 
}
</SCRIPT>
</HEAD>
<BODY>
输入你最喜欢的颜色:<INPUT ID=oEnterColor><BR><BR>
<INPUT VALUE="Apply" TYPE=button onclick="getInfoAndUpdate();">
<INPUT VALUE="Ok" TYPE=button onclick="getInfoAndUpdate();window.close();">
<INPUT VALUE="Cancel" TYPE=button onclick="cancel();window.close();">
</BODY>
</HTML> 
在浏览器中打开caller.htm,点击“显示非模态对话框”按钮,出现新对话框:
 
 
在对话框中输入其他颜色名称,点击“Apply”按钮后,执行callee.htm中的getInfoAndUpdate函数:
function getInfoAndUpdate() {
var callerWindowObj = dialogArguments;
callerWindowObj.sColor = oEnterColor.value;
callerWindowObj.update();
}
因为在caller.htm中传递给callee.htm的是对象类型数据window,所以经过第一条语句的附值,callerWindowObj就指向了caller.htm页面,然后就可以在callee.htm中按照callerWindowObj.xxx的形式引用caller.htm中的变量及函数:callerWindowObj.sColor = oEnterColor.value负责将callee.htm中输入的颜色名称传递给caller.htm中的变量sColor,然后再执行caller.htm中的 update()函数更新显示信息。
可以看到,通过对象方式传递数据,功能很丰富强大,而且使用起来也不复杂。
六、结 语
以上对使用JavaScript语言操作模态和非模态对话框进行了详细介绍,相信你又掌握了在html页面中创建窗口的一个新技术。在实际应用中,模态对话框的功能比较实用,可用于必须让访问者阅读相关内容的情况下。另外,利用对象方式在窗口间传递数据,功能非常强大但使用却不复杂,是非常值得一用的技术。

 

 

 

showModalDialog和showModelessDialog使用心得

一、showModalDialog和showModelessDialog有什么不同?
  showModalDialog:被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。
  showModelessDialog:被打开后,用户可以随机切换输入焦点。对主窗口没有任何影响(最多是被挡住一下而以。:P)

二、怎样才让在showModalDialog和showModelessDialog的超连接不弹出新窗口?
  在被打开的网页里加上<base target="_self">就可以了。这句话一般是放在<html>和<body>之间的。

三、怎样才刷新showModalDialog和showModelessDialog里的内容?
  在showModalDialog和showModelessDialog里是不能按F5刷新的,又不能弹出菜单。这个只能依靠javascript了,以下是相关代码:

<body onkeydown="if (event.keyCode==116){reload.click()}">
<a id="reload" href="filename.htm" style="display:none">reload...</a>

  将filename.htm替换成网页的名字然后将它放到你打开的网页里,按F5就可以刷新了,注意,这个要配合<base target="_self">使用,不然你按下F5会弹出新窗口的。

四、如何用javascript关掉showModalDialog(或showModelessDialog)打开的窗口。
  <input type="button" value="关闭" onclick="window.close()">
  也要配合<base target="_self">,不然会打开一个新的IE窗口,然后再关掉的。

五、showModalDialog和showModelessDialog数据传递技巧。
  (作者语:本来想用一问一答形式来写的,但是我想不出这个怎么问,所以只好这样了。)
  这个东西比较麻烦,我改了好几次了不是没办法说明白(语文水平越来越差了),只好用个例子说明了。
  例子:
    现在需要在一个showModalDialog(或showModelessDialog)里读取或设置一个变量var_name

      一般的传递方式:
        window.showModalDialog("filename.htm",var_name)
        //传递var_name变量
      在showModalDialog(或showModelessDialog)读取和设置时:
        alert(window.dialogArguments)//读取var_name变量
        window.dialogArguments="oyiboy"//设置var_name变量
    这种方式是可以满足的,但是当你想在操作var_name同时再操作第二个变理var_id时呢?就无法再进行操作了。这就是这种传递方式的局限性。
    
      以下是我建议使用的传递方式:
        window.showModalDialog("filename.htm",window)
        //不管要操作什么变量,只直传递主窗口的window对象
      在showModalDialog(或showModelessDialog)读取和设置时:
        alert(window.dialogArguments.var_name)//读取var_name变量
        window.dialogArguments.var_name="oyiboy"//设置var_name变量

        同时我也可以操作var_id变量
        alert(window.dialogArguments.var_id)//读取var_id变量
        window.dialogArguments.var_id="001"//设置var_id变量

        同样还可以对主窗口的任何对象进行操作,如form对象里的元素。
        window.dialogArguments.form1.index1.value="这是在设置index1元素的值"

六、多个showModelessDialog的相互操作。
  因为光说很费劲,我就偷点懒,直接用代码来说了,如果不明白的话那就直接来信(oyiboy#163.net(使用时请将#改成@))问我吧。

  以下代码的主要作用是在一个showModelessDialog里移动别一个showModelessDialog的位置。

  主文件的部份js代码。
  var s1=showModelessDialog('控制.htm',window,"dialogTop:1px;dialogLeft:1px") //打开控制窗口
  var s2=showModelessDialog('about:blank',window,"dialogTop:200px;dialogLeft:300px")  //打开被控制窗口

  控制.htm的部份代码。
  <script>
    //操作位置数据,因为窗口的位置数据是"xxxpx"方式的,所以需要这样的一个特殊操作函数。
 function countNumber(A_strNumber,A_strWhatdo)
 {
  A_strNumber=A_strNumber.replace('px','')
  A_strNumber-=0
  switch(A_strWhatdo)
  {
  case "-":A_strNumber-=10;break;
  case "+":A_strNumber+=10;break;
  }
  return A_strNumber + "px"
 }
  </script>
  <input type="button" onclick="window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,'-')" value="上移">
  <input type="button" onclick="window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,'-')" value="左移">
  <input type="button" onclick="window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,'+')" value="右移">
  <input type="button" onclick="window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,'+')" value="下移">

  以上关键部份是:
    窗口命名方式:var s1=showModelessDialog('控制.htm',window,"dialogTop:1px;dialogLeft:1px")
    变量访问方式:window.dialogArguments.s2.dialogTop

  这个例子只是现实showModelessDialog与showModelessDialog之间的位置操作功能,通过这个原理,在showModelessDialog之间相互控制各自的显示页面,传递变量和数据等。这要看各位的发挥了。

 

分享到:
评论

相关推荐

    ShowDialog的使用心得

    本文介绍了如何使用`window.open()`方法以及Internet Explorer特有的`window.showModalDialog()`和`window.showModelessDialog()`方法来实现弹出窗口的功能。其中,`window.open()`是最常用的方法之一,而`window....

    window.showModalDialog()返回值的学习心得总结

    需要注意的是,`showModalDialog()` 和 `showModelessDialog()` 主要是IE浏览器的特性,对于其他浏览器(如Firefox、Chrome)支持并不一致,因此在现代Web开发中,更倾向于使用HTML5的`&lt;dialog&gt;`元素或者第三方库...

    大数据处理领域:Elasticsearch的高级应用及优化技巧

    内容概要:Elasticsearch是一款强大且灵活的搜索和数据分析工具。文中介绍了其核心技术如分布式存储、实时搜索、全文检索、数据分析等。通过对基础概念的学习,如索引、文档、类型、映射的理解,结合实战案例解析,重点展示了Elasticsearch在电商业务商品搜索引擎构建以及高效日志管理系统部署方面的实际运用方法和技术细节。此外,围绕性能优化展开了讨论,强调了诸如合理的分片和副本配置、有效运用内部缓存机制和精心规划集群资源配置等一系列措施的重要性。 适合人群:从事IT行业的中级及以上技术水平从业者,尤其是那些负责大数据处理、分布式系统的架构师及工程师。 使用场景及目标:①希望掌握利用Elasticsearch快速实现高效的搜索与分析应用的方法论和技术路径;②旨在通过实例学习到针对不同应用场景(如电商网站、日志分析)如何正确配置系统参数、优化集群表现,进而达成更好的用户体验或运营效率;③寻求提升系统稳定性、可靠性并解决可能出现的问题。 其他说明:本文不仅仅讲述了理论知识,还有详实的具体操作指南,帮助读者在实践中深入理解Elasticsearch的能力,并鼓励他们在自己的项目中积极探索更

    基于Matlab的双三方演化博弈与Lotka-Volterra模型稳定点分析、相位图绘制与仿真代码实现,基于Matlab的双三方演化博弈与Lotka-Volterra模型:稳定点分析、相位图绘制与仿真

    基于Matlab的双三方演化博弈与Lotka-Volterra模型稳定点分析、相位图绘制与仿真代码实现,基于Matlab的双三方演化博弈与Lotka-Volterra模型:稳定点分析、相位图绘制与仿真代码实践,matlab:双或三方演化博弈,lotka-Volterra 1.双方演化博弈:代分析稳定点分析,代绘制相位图,matlab仿真图代码 2.三方演化博弈:代分析稳定点分析,代绘制相位图,matlab仿真图代码3.lotka-Volterra模型 ,核心关键词:Matlab; 双或三方演化博弈; 稳定点分析; 相位图; 仿真图代码; Lotka-Volterra模型,MATLAB仿真:双三方演化博弈与Lotka-Volterra模型的稳定点分析与相位图绘制

    基于词袋模型及神经网络的文本分类算法新版源码+说明+数据

    【资源介绍】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,也可以作为小白实战演练和初期项目立项演示的重要参考借鉴资料。 3、本资源作为“学习资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研和多多调试实践。 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip 基于词袋模型及神经网络的文本分类算法新版源码+说明+数据.zip

    【车间调度】基于matlab人工蜂群算法ABC求解分布式置换流水车间调度DPFSP【含Matlab源码 6166期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【多普勒雷达】基于matlab风力涡轮机多普勒雷达仿真模型【含Matlab源码 9813期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    COMSOL模拟放电电极击穿空气过程:电场分布与击穿间隙电压计算分析,COMSOL模拟放电电极击穿空气过程:电场分布与击穿间隙电压计算分析,comsol放电电极击穿空气模拟,计算击穿间隙的电压,周围附

    COMSOL模拟放电电极击穿空气过程:电场分布与击穿间隙电压计算分析,COMSOL模拟放电电极击穿空气过程:电场分布与击穿间隙电压计算分析,comsol放电电极击穿空气模拟,计算击穿间隙的电压,周围附近的电场 ,关键词:COMSOL放电电极;击穿空气模拟;计算;击穿间隙电压;周围附近电场;电场分布。,COMSOL模拟放电电极击穿空气过程,计算电压与电场分布分析

    高压柔性输电系统:6脉冲与12脉冲晶闸管控制的HVDC仿真模型详细说明文档,高压柔性输电系统:6脉冲与12脉冲晶闸管控制的HVDC仿真模型详解说明文档,高压柔性输电系统6脉冲,12脉冲晶闸管控制HVD

    高压柔性输电系统:6脉冲与12脉冲晶闸管控制的HVDC仿真模型详细说明文档,高压柔性输电系统:6脉冲与12脉冲晶闸管控制的HVDC仿真模型详解说明文档,高压柔性输电系统6脉冲,12脉冲晶闸管控制HVDC的仿真模型,说明文档 ,高压柔性输电系统; 6脉冲HVDC; 12脉冲晶闸管控制; 仿真模型; 说明文档,高压柔性输电系统仿真模型:6/12脉冲晶闸管控制HVDC说明文档

    【故障诊断】基于matlab稀疏包络谱分析多通道数据驱动的BRB故障诊断【含Matlab源码 9922期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    通过复杂的文本对齐和运动感知一致性进行内容丰富的AIGC视频质量评估

    近年来,文本驱动的视频生成 (Brooks 等人 2024;Hunyuan 2024) 取得了显著增长。然而,评估这些文本驱动的AI生成视频带来了独特且日益严峻的挑战。这些挑战主要源于两个关键问题:(1)需要精确的视频与文本对齐,特别是在处理复杂和长文本提示时;(2)出现了一些在自然生成视频中不常见的独特失真现象,例如不规则运动模式和物体。 随着新一代视频模型的发展,这些挑战变得更加突出。这些新一代模型以 Sora (Brooks 等人 2024) 的出现为标志,在生成质量上相比以往模型有了显著提升,其特点在于丰富的细节和内容,如 Kling (快手 2024) 、Gen-3-alpha (Runway 2024) 、Vidu (圣书 2024) 等。与之前的 AIGC 视频相比,这些模型支持 更长且更复杂的文本提示(通常超过200个字符),以及更复杂的运动模式和更长的持续时间(通常超过5秒,帧率为24帧每秒) 。如图 [fig:1] 所示,这些丰富的内容对评估者的理解视频动态及其与复杂文本语义关系的能力提出了更高的要求。 为了应对这一问题,我们引入了 Conten

    B站黑马程序员第二章08-字符串的三种定义方式(个人笔记)

    在B站看黑马程序员,自学python,整理的个人笔记

    传统永磁同步电机FOC离散化Simulink模型实践指南:高效性能与传递函数离散化推导文档附赠,传统永磁同步电机FOC离散化Simulink模型实战解析及传递函数离散化推导入门指南,传统永磁同步电机的

    传统永磁同步电机FOC离散化Simulink模型实践指南:高效性能与传递函数离散化推导文档附赠,传统永磁同步电机FOC离散化Simulink模型实战解析及传递函数离散化推导入门指南,传统永磁同步电机的FOC离散化simulink模型,效果较好。 附赠传递函数离散化推导的文档,初学者可以入手。 ,传统永磁同步电机; FOC离散化; Simulink模型; 传递函数离散化; 推导文档。,FOC离散化Simulink模型:永磁同步电机高效控制与传递函数离散化解析

    创业者必备:解读DeepSeek引发的AI技术与应用革新

    内容概要:本文由360集团创始人周鸿祎撰写,深入探讨了DeepSeek这一前沿AI技术及其对各行各业所带来的巨大机遇。文中详细阐述了人工智能的发展历程,特别是大模型的演进,并指出了DeepSeek如何在技术和用户体验方面取得重大突破,引领新的工业革命,以及中国在该领域的创新和发展前景。同时介绍了如何借助DeepSeek实现具体的企业应用,涵盖知识库建设、智能体开发等多个方面的实践经验。 适用人群:针对政府机构、企业和创新创业者的高级管理层和技术领导者,旨在提供对当前AI前沿技术和未来发展策略的理解。 使用场景及目标:适用于希望通过先进技术提升竞争力的单位或个人;目的在于引导读者建立正确的AI意识,了解最新的技术动向和实施路径,为未来的战略规划打下坚实的基础。 其他说明:文档还强调了在全球范围内争夺大模型主导地位的竞争环境下,中国企业应该如何抓住机遇实现快速发展,以及如何克服现有挑战,确保安全可靠的应用。

    软件测试基础(功能测试)笔记

    APP测试基础流程

    建设工程管理数字孪生平台解决方案.docx

    建设工程管理数字孪生平台解决方案.docx

    【车间调度】基于matlab沙猫群算法SCSO求解零空闲流水车间调度问题NIFSP【含Matlab源码 7974期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    串口助手,可以调整串口接收数据大小,颜色文字。显示接收时间。

    串口助手

    深度学习-卷积神经网络的猫狗数据集

    深度学习-卷积神经网络的猫狗数据集

Global site tag (gtag.js) - Google Analytics