你是否面临这样的问题,需要在Web中采用类似传统桌面应用程序中的弹出式窗口的功能?你也许需要用这种方式来从用户那里收集数据,然后传回到应用程序中。我们知道,在Web中ASP与客户端脚本是不同的,对于该由谁担负这项任务可能会有一些迷惑。本文中,我们将介绍在IE 4中从用户端收集数据的两种方法。特别地,将着重介绍使用"Open"和"OpenDialog"方法;另一方面,我们还要弄明白到底是服务器端的ASP还是客户端的脚本负责控制窗口对象。
在Web上冲浪一段时间后,你也许会发现自己已经被讨厌的弹出式窗口包围了,这些广告窗口是在你进入和离开网站的不经意间弹出的。对于这些浏览窗口应该在何时采用,暂且不作伦理上的讨论,我们只关心新窗口如何弹出--可以通过两种方法做到。第一种方法是在HTML中定义一个新的目标定位标识,如果这个定位标识的目标窗口或者目标帧被设置为"_blank",或者在现有的窗口和帧中无法找到,一个新的浏览窗口就会被打开。
打开新的浏览窗口的第二种方法是使用"window.open"方法。如图A所示,当你需要收集次要数据并将其回显在主页面上的时候,弹出式窗口正是应需之选。
图A: 利用弹出式窗口进行数据信息的收集
打开新的浏览窗口的命令语法如下:
oNewWindow=window.open([sURL] [, sName] [, sFeatures] [, bReplace])
在上句中,sURL是新浏览窗口的目标定位,sName是其名称,sFeatures指定有关窗口显示风格的选项,bReplace用来控制浏览历史。下面这条代码是一个简单的例子,打开一个新的指向"frmUserWindowInput.ASP"文件的浏览窗口:
var objWindow = window.open("frmUserWindowInput.ASP")
有一点需要明确说明,所有新浏览窗口对象的初始化都必须取决于用户的行为。设想一下,如果可以随意触及客户的桌面并且运行应用程序,就是让用户在安全上冒险。决定打开新窗口的用户行为并不仅仅限于显式地和用户进行交互;利用浏览器触发的脚本事件也可以打开客户端的窗口。
例如,当一个Web页面的浏览结束的时候,可以利用由此产生的UNLOAD事件调入新的浏览窗口。无论如何,必须牢牢记住,只有用户的请求才能用来引发建立新的浏览器对象。明确了这一点,我们开始学习在一个客户端JavaScript函数LoadSimpleExample中使用window.open方法。函数LoadSimpleExample的代码如表A所列,当用户点击超衔接"Load Simple Window"的时候,LoadSimpleExample就会被调用,如图B所示。
这个脚本使用open函数打开新的浏览窗口,并且调入页面frmUserWindowInput.ASP。新的浏览窗口具有同父窗口相同的特征(工具条、状态条等等),如图B所示。后面我们会讨论如何控制新的浏览窗口的显示特征。
图B:点击 Load Simple Window超衔接调入新的浏览窗口
记住,如果你在"Load Simple Window"衔接上重复点击,就会重复产生新的窗口。后面我们将看到如何避免这种情况。
注意:这段代码中没有明确表明的是任何客户端的脚本必然引发this open事件。在ASP页面中使用这段代码会引发错误。