热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

弹出窗口拦截攻防

1.Pop-upBlockerWindowsXPSP2在InternetExplorer中增加了Pop-upBlocker(弹出窗口阻止程序),它可以阻止或屏蔽大部分的弹出窗口。对

1.Pop-up Blocker

Windows XP SP2在Internet Explorer中增加了Pop-up Blocker(弹出窗口阻止程序),它可以阻止或屏蔽大部分的弹出窗口。对于由最终用户点击链接打开的窗口不会被影响,另外来自本地网和信任站点域的弹出窗口也不会被阻止。

Pop-up Blocker默认为开启状态,这样可以阻止自动打开和在后台打开的弹出窗口,但是用户点击链接打开的窗口仍然可以正常显示。

启用 Pop-up Blocker
可以使用三种不同的方法启用 Pop-up Blocker。
? 第一次出现时的提示
在第一个弹出窗口出现之前出现提示,询问用户是否启用 Pop-up Blocker。
? “工具” 菜单
在 Internet Explorer 中,在 工具 菜单上,点击 屏蔽弹出窗口, 然后点击 阻止弹出窗口.
? Internet 选项.
在 Internet Explorer 的 工具 菜单上,点击 Internet 选项,点击隐私选项卡,然后点击 屏蔽弹出窗口。然后点击选项,对 Pop-up Blocker 加以设置。
 
当一个弹出窗口被屏蔽时:
当一个站点的弹出窗口被屏蔽时,会在状态栏上显示一个通知和播放一个声音,而且将在显示区域上边地址栏下边显示信息栏(您可以不播放声音和显示信息栏,参见后面的高级设置选项)。点击状态栏上的通知,可以看到一个带有如下选项的菜单:
? 显示被阻止的弹出窗口。重新加载弹出窗口。
? 允许来自该站点的弹出窗口。将当前站点添加到 “允许” 列表。
? 阻止弹出窗口。开启或关闭 Pop-up Blocker。
? 弹出窗口选项。打开 “ 弹出窗口管理” 窗口。
 
信息栏则会显示弹出窗口被屏蔽消息并通知用户可以通过点击信息栏允许弹出窗口和其他设置:
? 显示被阻止的弹出窗口。重新加载弹出窗口。
? 允许来自该站点的弹出窗口。将当前站点添加到 “允许” 列表。
? 设置是否阻止弹出窗口和显示信息栏以及更多高级设置。
? 信息栏帮助。

高级设置选项
信任站点列表
最终用户和IT管理员能够通过将一些网站加入信任站点列表从而允许这些网站的自动弹出窗口。

过滤级别设置和其他选项
三种过滤级别:
 高级:阻止所有的弹出窗口(可以通过按住ALT键点击链接打开窗口)
 中级:阻止大部分自动弹出窗口(默认级别)
 低级:允许安全站点的弹出窗口
其他选项:
 当一个弹出窗口被屏蔽时是否播放一段声音
 当一个弹出窗口被屏蔽时是否显示信息栏

*以下内容除非特别标注,否则都是在Pop-up Blocker的默认设置下。

阻止机理
Pop-up Blocker会屏蔽除了除createPopup()(IE5.5及以上版本支持,参见附录)之外的从脚本自动打开的任何窗口。受此影响的一些常用函数是:window.open(), showModelessDialog(), showModalDialog(), showHelp(), window.external.NavigateAndFind()。

 

2.检查方法
在已有的资料中,微软还没有提供可以检测用户是否打开了IE Blocker的功能,只是提供了如何检查窗口是否被阻止的方法。

对于window.open()打开的窗口,当窗口被阻止,那么函数将返回空值。当弹出被阻止时,在使用 window.open() 的返回值来避免脚本错误之前,请始终对该值进行检查。


 
 
  
 
 
 


 

这个例子显示如何检查函数返回值来判断用window.open()方法打开的弹出窗口是否被阻止。

对于使用showModelessDialog(), showModalDialog(), showHelp()自动打开的窗口,可以通过以下两种方式来处理弹出窗口被阻止的情况:
1 如果浏览器版本是IE 5.0及以上,那么就可以在Javascript代码中使用try/catch结构来处理。如下列代码所示:


 
 
 
 
 
  


 
 
 
 

在此例中,当页面初始化时通过openWin()函数自动打开的窗口将被阻止,并显示错误信息和错误代号。

2 让打开窗口的函数设置Javascript错误句柄。如下所示:


 
 
 
 
 


 
 
 

这个示例证明了通过设置错误句柄来捕获窗口被阻止时的异常信息。和以上方法一样,可以通过这种方式来通知用户禁用Pop-up Blocker或将站点加入可信站点域来查看弹出内容。

 

如何检测浏览站点的浏览器是否是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。

 

 

 

 

 

3.绕过拦截方法一

弹出窗口的网页插入的代码:

  Open.htm代码:

 

 

4.绕过拦截方法二

 ForceWindow.iclass.js代码如下(使用、讲解、相关说明全部在注释中):

————————————————————————–
/**
 * =========================================================================
 * 本程序可自由复制、修改、传播,不得删除以下信息。如用于商业用途须经原作者同意方可使用。
 * =========================================================================
 * 程序名称:ForceWindow(@iClass.JS)
 * 描  述:“冲破”广告拦截软件,强制弹出窗口。
 * 版  本:1.0.0
 * 创建时间:2004年1月19日
 * 修改时间:2004年1月19日
 * 文件名称:ForceWindow.iclass.js
 * 作  者:钟钟
 * 邮箱地址:zz@iecn.net zz315@163.com
 * 版权声明:本程序属于iClass.JS,版权归作者所有。
 * 有关iClass计划详见:http://www.iecn.net/forum/showthread.php?threadid=14811
 * =========================================================================
 */

/**
 * 定义ForceWindow类构造函数
 * 无参数
 * 无返回值
 */
function ForceWindow ()
{
  this.r = document.documentElement;
  this.f = document.createElement(“FORM”);
  this.f.target = “_blank”;
  this.f.method = “post”;
  this.r.insertBefore(this.f, this.r.childNodes[0]);
}

/**
 * 定义open方法
 * 参数sUrl:字符串,要打开窗口的URL。
 * 无返回值
 */
ForceWindow.prototype.open = function (sUrl)
{
  this.f.action = sUrl;
  this.f.submit();
}

/**
 * 实例化一个ForceWindow对象并做为window对象的一个子对象以方便调用
 * 定义后可以这样来使用:window.force.open(“URL”);
 */
window.force = new ForceWindow();

/**
 * 用本程序弹出的窗口将不会被广告拦截软件拦截,但有一个缺点:你无法象对window.open弹出的窗口那样对外观进行定制。
 * 你当然也可以在使用前实例化一个ForceWindow对象:
 * var myWindow = new ForceWindow();
 * 这样来使用:
 * myWindow.open(“URL”);
 * 本程序测试通过的浏览器:IE 5+、Firefox 1.0、Mozilla 1.7.5、Netscape 7.2、Opera 7.23
 * 友情提示:如果你将本程序用于强制弹出广告,请更多的想想浏览者的感受!
 */

 

 

 

5.绕过拦截方法三

绕过拦截的弹出窗口 ——————
    弹出窗口示例
    window_open.html
    faisun@sina.com
–>

 

 

6.其它不被拦截的情况

   对于页面中通过链接打开的窗口一般不会被拦截.

 当按住CTRL 键时 可以临时允许弹出窗口!


推荐阅读
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 如何在窗口右下角添加调整大小的手柄
    本文探讨了如何在传统MFC/Win32 API编程中实现类似C# WinForms中的SizeGrip功能,即在窗口的右下角显示一个用于调整窗口大小的手柄。我们将介绍具体的实现方法和相关API。 ... [详细]
  • 在使用 MUI 框架进行应用开发时,开发者常常会遇到 mui.init() 和 mui.plusReady() 这两个方法。本文将详细解释它们的区别及其在不同开发环境下的应用。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 本文介绍如何通过 JavaScript 实现一个基于鼠标坐标的 Tooltip 弹出层,详细解释了如何获取窗口和文档的尺寸及滚动位置,并优化了代码结构。 ... [详细]
  • 在进行Revit插件开发时,经常会遇到窗口被其他应用程序遮挡的问题。本文将介绍如何通过简单的代码调整,确保插件窗口始终保持在Revit主界面的最前端,提升用户体验。 ... [详细]
  • 在尝试用另一台电脑的MySQL文件替换本地D:\xampp\mysql目录后,MySQL服务无法启动。错误提示显示MySQL意外关闭,可能是由于端口冲突、依赖缺失、权限问题或崩溃等原因引起。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文探讨了在使用Selenium进行自动化测试时,由于webdriver对象实例化位置不同而导致浏览器闪退的问题,并提供了详细的代码示例和解决方案。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
  • 本篇教程将继续深入探讨GDI+绘图技术,解决在使用过程中可能出现的文件覆盖保存问题,并提供详细的代码示例和解决方案。通过本教程,读者将能够更好地理解GDI+绘图机制,避免常见的错误。 ... [详细]
author-avatar
aloneloveu2005
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有