Microsoft Corporation
适用于:
Microsoft Active X controls
Microsoft Internet Explorer
Microsoft Outlook Express
Microsoft Windows XP Service Pack 2 (SP2)
摘要:使您的 Web 站点能够很好地使用 Windows XP SP2 中的新安全功能,这些功能可能会影响 ActiveX 控件、文件下载、弹出窗口等。
您的 Web 站点是否使用 Microsoft ActiveX 控件? | |
您的 Web 站点是否允许用户下载文件? | |
您的 Web 站点是否使用弹出窗口? | |
您的 Web 站点是否依赖于 Microsoft Java 虚拟机 (MSJVM)? | |
浏览器窗口限制 | |
常用技巧 |
在 Windows XP Service Pack 2 (SP2) 中,ActiveX 控件的模式安装提示最初由“信息栏”阻止。如果满足下列条件,则对已安装在计算机上的控件进行升级时,就会引发一个异常:
• | 注册为 ActiveX 控件的文件必须使用 Authenticode 技术签名。(该文件引用自 HKEY_CLASSES_ROOT\CLSID\{control_clsid}\InProcServer32,其中 control_clsid 为 CLSID,由 OBJECT 标记指定。) |
• | 新控件的发布者名称以数字签名表示,它与现有控件数字签名中的发布者名称相匹配。 |
• | 如果 ActiveX 控件打包为一个 CAB 文件,则该 CAB 文件必须经过签名。要安装的 DLL 或 OCX 也应该进行签名,以便随后的升级可以跳过“信息栏”。 |
如果“信息栏”阻止某个 ActiveX 控件,并且该控件会占用页面上的区域,则 Internet Explorer 将显示一个嵌入式图标和文本(而不是控件),表示需要安装 ActiveX 控件。最终用户将能够单击该区域或“信息栏”,以安装 ActiveX 控件。
如果是,请注意有关升级该控件的未来安装提示也会被“信息栏”阻止,除非您对要注册为 ActiveX 控件的 DLL 或 OCX 进行签名。
如果尚未安装控件就进行刷新,某些网页将自动进行重定向或表现不同。在某些情况下,以这种方式构建站点可能会阻止用户安装该控件,从而带来不好的用户体验。
由于网页无法区分是用户拒绝 ActiveX 控件的安装,还是“信息栏”阻止控件,所以安装 ActiveX 控件的推荐做法是:在一个解释控件用途的单独网页上创建该控件的一个实例。此外,还应在 <OBJECT> 标记中使用 <SPAN> 部分,以便为用户动态提供有关安装失败的“帮助”文本。
为了防止用户混淆,您可以更新这些图像来反映新的 Authenticode 用户界面 (UI)。您可以使用用户代理字符串来确定浏览器的正确版本。(有关检测 SP2 的详细信息,请参阅常用技巧。)
如果对话框没有提供安装 ActiveX 控件的选项,则说明该文件可能没有进行正确签名。请确保您的文件已签名,并且该签名仍然有效。默认情况下,当 ActiveX 控件的签名无效时,SP2 会阻止该控件的安装。
• | 不要使用弹出窗口或 HTML 对话框来安装 ActiveX 控件。 |
• | 不要建议用户降低他们的安全设置来安装 ActiveX 控件。 |
• | 在描述控件的用途和对最终用户影响的单独页面上创建 ActiveX 控件的一个实例。 |
在 SP2 中,“信息栏”将阻止能够自动启动的文件下载提示。
在 SP2 中,用于文件下载、邮件附件、Shell 进程处理和程序安装的提示已经进行了修改,比它们在 Windows XP Service Pack 1 (SP1) 中更加一致、清晰。在 SP2 中,在下载可能会潜在损害用户计算机并可以进行签名的文件类型后,将显示发布者信息。(可以进行签名并可能潜在损害用户计算机的常见文件类型包括 .exe、.dll、.ocx 和 .msi)。
如果当用户没有使用鼠标单击或按键来启动导航时,Web 站点尝试导航到生成文件下载对话框的资源,则文件下载提示将被“信息栏”阻止。
要确保下载不会被阻止,您可以将所有下载作为一个直接用户操作的结果。
如果您的站点包含由 MIME 处理程序处理的文件,则这些文件的扩展名应对应于与 MIME 处理程序相同的 ProgID。如果给定文件的内容类型 ProgID 与文件扩展名 ProgID 不匹配,则 XP SP2 中的 Internet Explorer 可能会采取下列操作:1) 可能会提示用户下载文件;2) 如果该文件无法在 MIME 处理程序中处理,则它将不会在扩展名处理程序中处理。
您可以通过更改内容类型以匹配文件扩展名,来修正这些不匹配。请确定这也适用于您的网页。
例外:此更改不会影响发送“content-disposition=attachment”标头的情况。在这些情况下,服务器建议的文件名或扩展名被认为是最终名称,并且不会随多用途 Internet 邮件扩展 (MIME) 探测而更改。
如果客户使用的是 Windows XP Service Pack 2,请确保更新指向下载提示的所有图像,以反映新的下载对话框。要确定显示图像的版本,您可以在 Internet Explorer 中使用“用户代理”字符串(有关检测 SP2 的详细信息,请参阅常用技巧)。
现在,SP2 可以检查能够进行数字签名的文件的数字签名。这些文件的最常见示例包括具有以下扩展名的文件:.exe、.dll、.cab、.ocx 和 .msi。如果您是可以使用 Authenticode 技术进行签名的文件的发布者,那么现在客户将能够验证您创建的文件。这适用于 Internet Explorer 和 Outlook Express。
Internet Explorer 包括有在 SP2 中默认开启的弹出阻止程序。这个弹出阻止程序可能会干预自动从脚本中生成新窗口的站点。对于需要自动弹出的情况,该弹出阻止程序包含了一个有帮助的“允许”列表。默认情况下,弹出阻止程序不会尝试阻止从 Intranet 或受信任站点区域启动的弹出。
Internet Explorer 将尝试阻止从脚本自动打开的任何窗口,但 createPopup() 除外。某些受到影响的常用函数包括 window.open()、showModelessDialog()、showModalDialog() 和 showHelp()。(注:自动以搜索窗格为目标的操作也会因弹出阻止限制而被阻止。)
作为用户操作的直接结果而打开的弹出窗口不会被阻止,例如单击某个页面元素。默认情况下,弹出阻止没有应用到 Intranet 或受信任站点区域。
如果窗口被阻止,那么返回窗口对象的函数将返回空值。当弹出被阻止时,在使用 window.open() 的返回值来避免脚本错误之前,请始终对该值进行检查。
只要可能,请不要根据阻止的内容进行重定向或关闭窗口。如果在弹出被阻止时,您的站点重定向到其他站点,那么对于客户而言,可能很难显示被阻止的弹出。在这种情况下,重定向的站点不会显示通常出现的“信息栏”,无法让用户轻松地访问弹出内容。
同样,如果某个窗口由于阻止弹出而关闭,那么显示该阻止弹出的“信息栏”入口点将与该窗口一起消失。
只要可能,请不要从一个弹出窗口中启动另一个自动弹出窗口。在弹出阻止程序中,第二个启动不会被视为用户操作,因而会被阻止。
在 Windows XP Service Pack 2 中,setHomePage() 函数只能从用户操作中启动,类似于弹出窗口。自动启动的 setHomePage() 提示将被阻止。
如果站点在异步请求信息后打开特定的窗口,则 Internet Explorer 可能会阻止这些窗口,即使用户单击了链接以打开该窗口。如果在请求异步信息之前,直接从用户启动的操作(鼠标单击)打开窗口,那么这些窗口不会被阻止。用户启动的操作不能跨导航保持。
对于其他弹出窗口,如果窗口不是从用户操作启动的,那么弹出阻止程序就会阻止它。一个窗口必须响应直接用户操作才允许被打开。
• | 请不要在弹出窗口失败时进行重定向。 |
• | 如果弹出窗口、下载或 ActiveX 控件被阻止,请不要关闭或自动重定向浏览器窗口。如果您关闭或重定向浏览器窗口,用户将无法在“信息栏”上单击并接受弹出窗口、下载或 ActiveX 控件。 |
• | 请不要从弹出窗口中启动弹出窗口。 |
• | 请不要从一个用户操作启动多个弹出窗口。 |
• | 请不要从 showModelessDialog() 或 showModalDialog() 调用中启动自动弹出窗口。 |
请参阅 Microsoft Web 站点上的 Microsoft Java Virtual Machine Support。
检查代码以确保您理解使用 window.open() 或 window.createPopup() 方法对脚本启动的窗口进行的限制。脚本可以调用相同的方法来创建 Internet Explorer 有边窗口(使用 window.open() 方法),或 Internet Explorer 无边弹出窗口(使用 window.createPopup() 方法)。但是,您可能需要检查设计,以确保弹出窗口在适当的时候对用户可见,并且状态栏包含的信息正确。
下列指导将说明如何在运行 Windows Restrictions Security 功能的过程中使用脚本启动的窗口调用。
对于使用 window.open() 打开的窗口:
• | 预期状态栏会出现,并为其编写代码。默认情况下,状态栏为开启,并且高度为 20-25 像素。 |
• | 调整窗口的大小和内容,使它在视觉上适合窗口的整体大小。窗口不能覆盖任务栏,因此如果状态栏为开启状态,并且未考虑到任务栏,它可能会损失 40 像素。窗口在任务栏外的垂直大小不能超过 30 像素。 |
• | 不要在屏幕外打开窗口 - 它们会进行一段最小的 X 和 Y 坐标偏移,使窗口完全显示在屏幕上。 |
• | 与前面一样,窗口的显示会受到显示主题、字体大小和分辨率的影响,因此在您设计窗口时,可能还需要考虑这些 UI 的影响。 |
• | 注:现在,带有 fullscreen=yes 的 window.open() 会导致最大化的窗口,而不是 kiosk 模式的窗口。 |
对于使用 window.createPopup() 打开的窗口:
• | 调整窗口的大小和内容,使它在视觉上适合窗口的整体大小。使用这个新功能,窗口将不会覆盖其父窗口的标题栏或状态栏,因此如果未考虑到标题栏或状态栏,它可能会损失 40 像素。请调整窗口的垂直大小,使其不超过页面的当前可见区域。 |
• | 不要在 Internet Explorer 的 HTML 生成表面之外打开无边浏览窗口 - 它们会进行一段最小的 X 和 Y 坐标偏移,使窗口完全显示在客户端区域内。但有一个例外:最多有半个窗口可以存在于 Internet Explorer 客户端区域的左侧或右侧边缘之外。 |
• | 与前面一样,窗口的显示会受到显示主题、字体大小和分辨率的影响,因此在您设计窗口时,可能还需要考虑这些 UI 的影响。 |
如果连接到您站点的浏览器是 SP2 中的 Internet Explorer,您可以使用 window.navigator.userAgent 来检测。
var g_fIsSP2 = false; function browserVersion() { g_fIsSP2 = (window.navigator.userAgent.indexOf("SV1") != -1); if (g_fIsSP2) { //This browser is Internet Explorer in SP2. } else { //This browser is not Internet Explorer in SP2. } }
如果用户代理字符串中包含“SV1”,说明连接到您站点的浏览器是 SP2 中的 Internet Explorer。
如果可能,请不要尝试创建 ActiveX 控件的新实例、自动启动文件下载或从这些对话框中自动启动弹出窗口。在这个方案中,当内容被阻止时将不会显示“信息栏”,因此用户将无法轻松地允许该内容。建议的解决方案是从 Internet Explorer 窗口中启动这些行为。
如果可能,在浏览器阻止内容(例如 ActiveX 控件、下载提示或弹出)时,请不要尝试重定向到另一个网页。在阻止该内容时,“信息栏”可能不会出现在重定向的页面上,因此用户可能无法轻松地查看该内容。