微调你的Web站点以适应Windows XP Service Pack 2(翻译) --- Windows XP SP 2-对Web开发者的安全信息(一)[2]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 keul 的 blog

ie浏览器将会阻止除createpopup()之外的从脚本自动打开的任何窗口。受此影响的一些常用函数是:window.open(), showmodelessdialog(), showmodaldialog(), and showhelp()。(注意:由于弹出限制,自动指向搜索pane也会被阻止。)

一个由用户直接行为弹出的窗口()将不被阻止。弹出窗口拦截不会默认的应用于企业内部网和信任站点区域。

怎样知道ie浏览器阻止了我的弹出窗口?

如果窗口被拦截,函数将返回一个返回null的窗口对象。确保检查window.open()的返回值来避免弹出窗口被拦截时发生脚本错误。

基于一个被拦截的弹出窗口,你的站点使用了转向或关闭页面的措施吗?

无论何种可能的情况下,在被拦截窗口中,都不要做转向或关闭窗口。在弹出窗口被阻止时,如果你转向到另一个站点,那可能更加难于显示被拦截的内容。在这种情况下,转向后的站点将不显示可以使用户便利地访问弹出内容的信息栏。

相似的,如果窗口被拦截时关闭,信息栏将指向不显示弹出窗口的拦截信息。

你的站点从一个弹出窗口载入另一个弹出窗口吗?

任何可能的情况下,不要从一个弹出窗口自动载入另一个弹出窗口,弹出窗口拦截器不认为这是一个用户行为并将阻止它。

你自动载入sethomepage()模态对话框吗?

在sp2中,sethomepage()函数仅仅在一个类似用户行为下弹出窗口。自动载入sethomepage()提示将被阻止。

当有不同步请求的信息时,你的web站点打开新的窗口吗?

在不同步请求信息后ie浏览器可能阻止站点打开的那个窗口,即使用户点击了一个链接去打开窗口。在不同步的请求信息之前,windows不会阻止由用户行为(鼠标点击)直接打开的窗口。由用户初始的行为不会被坚持。

你的web站点是否通过activex控件或其他一些页面对象载入了弹出窗口?

和其它弹出窗口一样,如果一个窗口不是通过用户行为弹出,拦截器将阻止它。一个窗口在响应用户直接行为下被允许打开。

弹出窗口的一般建议:

  • 不要在弹出窗口失败时转向。
  • 如果一个弹出窗口,下载,或activex控件被拦截,不要关闭或自动转向窗口。如果你这样做了,用户将不能够点击信息栏去接受弹出窗口,下载,或activex控件。
  • 不要从一个弹出窗口自动载入另一个弹出窗口。
  • 不要从用户行为中载入多个弹出窗口。
  • 不要从showmodelessdialog()showmodaldialog()调用中载入自动弹出窗口。

你的web站点依赖微软的java虚拟机吗?

参见微软网站上的 microsoft java virtual machine support

浏览器窗口限制

你的web站点使用定位窗口而使标题栏或地址栏在显示的可见区域顶部之上或状态栏在显示的可见区域底部之下吗?

回顾一下你的代码看看你是否正确理解了对于由window.open()window.createpopup()方法初始化的窗口的限制。对于一个阻拦的ie浏览器窗口(利用window.open()方法)或一个无阻拦的ie浏览器窗口(利用window.createpopup()方法)的创建,脚本能够调用相同的方法。然而,需要去确保设计弹出窗口适合于显示给用户或者状态栏能准确地显示信息。

下面是在运行windows安全限制特征时,对于脚本初始化窗口调用的指导方针。

对于使用window.open()打开的窗口:

  • 去呈现状态栏并为它编码。状态栏将被默认开启,它的高度是20-25pixels。
  • 调整你的窗口尺寸和内容让它看起来更好的适合于整个窗口的大小。不要让窗口挡住任务栏,因此你必须留出40pixels来保证状态栏和任务栏都正常显示。垂直方向上窗口离任务栏不要超过30pixels。
  • 不要打开偏离屏幕的窗口-否则将调整窗口的x,y参数来使它完整显示在屏幕中。
  • 在以前,窗口的显示受显示的主题,字体的大小以及解决方案,因此当你设计窗口时,也可能需要考虑这些用户界面的影响。
  • 注意:设置了fullscreen=yeswindow.open()将会打开一个最大化的窗口,而不是一个亭子模式的窗口。

对于使用window.createpopup()打开的窗口:

  • 调整你的窗口尺寸和内容让它看起来更好的适合于整个窗口的大小。在这个新特征下,窗口将不会挡住它的父窗口的标题栏或状态栏,因此它可能得需要40pixels留给标题栏或状态栏。窗口的垂直尺寸不能大于当前页面的可见区域。
  • 不要打开一个无阻拦的窗口飘在ie浏览器显示html区域的外面-否则将调整x,y参数来使窗口完整显示在客户端区域内。在这里存在一个异常:在窗口一半的地方,它能够在ie浏览器左边缘或右边缘的外边显示。
  • 在以前,窗口的显示受显示的主题,字体的大小以及解决方案,因此当你设计窗口时,也可能需要考虑这些用户界面的影响。

一般提示

在sp2中检测ie浏览器

在sp2中你可以通过window.navigator.useragent来检测连接到你的站点的浏览器是否是ie。

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.
  }
  }

如果user agent字符串为"sv1",那么浏览器肯定是ie。

你的站点使用showmodalessdialog()或showmodaldialog()调用吗?

通过这两种方式作一个尝试,不要创建实例去使用activex控件,自动下载文件或者自动弹出窗口。在这种情形下内容被拦截时信息栏将不被显示,用户也没有便捷的方式来允许这些内容。建议通过ie来初始化这些行为。

当内容被拦截你的站点是否转向了另一个页面?

本文关键:微调你的Web站点以适应Windows XP Service Pack 2(翻译) --- Windows XP SP 2-对Web开发者的安全信息(一)
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top