当前位置:七道奇文章资讯网站建设网站编程
日期:2010-03-08 09:57:00  来源:本站整理

精通ASP.NET中弹出窗口技术[网站编程]

赞助商链接



  本文“精通ASP.NET中弹出窗口技术[网站编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

 作为Microsoft的最新成立动态Web网站的工具,ASP.NET相关于ASP和JSP在改变原始的Web编程方法方面有了长足的长进.它的代码与页面别离技术(CodeBehind)以及完善的Web服务器控件为程序员供应了一个越发符合传统编程的Web服务器端开辟方法.但Web编程还是有着与传统编程不相同的特点,这些特点决意了ASP.NET编程中必须以一些特别的本领来完成程序要求,弹出窗口恰是这类编程方法的代表.相当多的编程书籍对弹出窗口采纳沉默大概一语带过,仿佛看不过弹出窗口的宏大利用天地.本文将为你解开弹出窗口利用中的大大都问题.

  为了提高网站的拜候的并发度和吞吐量,与别的服务器脚本一样,ASP.NET一样利用了客户端脚本来减轻服务器的压力.ASP.NET到目前(1.1版)为止并不直接支持弹出窗口,必须通过JavaScript(或VBScript)来利用客户端弹出窗口.

  1、 告诫窗口与在CodeBehind中利用客户端脚本的方法

  要在浏览器中弹出一个最简单的告诫窗口,可以利用JavaScript语句:

  window.alert( [sMessage])

  此中,sMessage是提醒信息.惋惜,这样的弹出窗口是只有一个“肯定”按钮,只能起到提醒作用.假如我们要在删除记录时刻弹出一个询问的弹出窗口,此时你需求利用:

  bConfirmed = window.confirm( [sMessage])

  此中:bConfirmed是返回值,sMessage是提醒信息.这个弹出窗口有两种挑选:“肯定”或“放弃”,其挑选的返回值放在bConfirmed中,可供代码作出判断.

  为了提高代码的可重用性与可读性,该当使JavaScript与Codehind彼此溶合.普通有两种方法可以到达这样的效果.

  (1) 利用Response.Write办法:

  利用Response.Write办法早在ASP时代就已经被支持了.它可以把代码写到客户端,是一种相当便利且直观的办法.以下代码演示了若何利用Response.Write办法来显示一个告诫信息.

  Private Sub btAlert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btAlert.Click

  ’演示Response.Write办法和alert窗口.

  Response.Write(" ")

  End Sub

  (2) 利用RegisterXXX办法

  假如你察看Response.Write的生成HTML代码,你会发现Response.Write办法生成的代码是写到了HTML代码的最开始,即标签之前.此时,全部的 HTML对象都还没有生成,假如要想利用HTML内的对象,并与之交互,就会呈现“找不到对象”的错误.因此,笔者举荐一个越发符合CodeBehind方法的方法----利用RegisterXXX办法.RegisterXXX包含:RegisterClientScriptBlock、RegisterStartupScript以及用于判断的IsStartupScriptRegistered函数.

  RegisterStartupScript 的原型是:

  Overridable Public Sub RegisterStartupScript( _

  ByVal key As String, _

  ByVal script As String _

  )

  此中:key表示这个脚本的唯一标识,script是代表脚本的字符串.

  RegisterClientScriptBlock的原型与RegisterStartupScript相同,两个函数差别在于将其包含的脚本代码写入到HTML文件的差别位置.RegisterClientScriptBlock在 Page 对象的 元素的开始标志后当即发出客户端脚本,RegisterStartupScript则是在Page 对象的 元素的完毕标志之前发出该脚本.假如你的脚本有与页面对象(doucument对象)举行交互的语句(这在我们背面的例子中看到),则举荐利用RegisterStartupScript,反之假如要想客户端脚本尽大概早的履行,则可以利用RegisterClientScriptBlock或Response.Write.

  为了避免在页面中反复加入脚本,在注册脚本时ReisterStartupScript/RegisterClientScriptBlock利用了key作为注册的Key,然后在程序中可以利用IsClientScriptBlockRegistered作判断.

  以下例子将利用RegisterClientScriptBlock来演示confirm的利用办法.

  Private Sub btConfirm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btConfirm.Click

  演示RegisterClientScriptBlock办法和confirm窗口

  If (Not IsClientScriptBlockRegistered("clientScript")) Then

  ‘判断能否已经加入了该脚本,没有则加入.

  Dim strScript As String

  strScript = " "

  ‘注册脚本

  RegisterClientScriptBlock("clientScript", strScript)

  ‘假如挑选”否”,则持续向下履行.

  End If

  End Sub

2、 弹出指定页面

  光有提醒窗口还远远不能满意我们的要求,在程序中,我们常常需求弹出指定页面.此时可以利用JavaScript的window.open办法.配合前面的RegisterClientSciptBlock办法,我们便可以实现指定页面的弹出.

  以下代码展示了若何弹出指定页面:

  Private Sub btWinOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btWinOpen.Click

  ’利用window.open与registerStartupScript简单演示.

  If (Not IsClientScriptBlockRegistered("OpenScript")) Then

  ’判断能否已经加入了该脚本,没有则加入.

  Dim strScript As String = " "

  RegisterStartupScript("OpenScript", strScript)

  End If

  End Sub

  程序利用Window.open办法来弹出新的页面,它只一个参数:新的弹出窗口的URL地址.事实在window.open办法有多个参数,但这是javascipt的简单内容,我们将不会在这儿具体分说.假如你有相关的问题,请查询MSDN.

  这段程序在IE中直接利用一切正常.但假如你正在利用类如GoSurf、MyIE2、NetCapter之类的浏览器,那么,很不幸! 你将看不到弹出窗口.这就是我们将要谈论的弹出窗口过滤问题.

  3、 非尺度IE浏览器对弹出窗口的过滤行为谈论

  广告窗口的泛滥使得不少网民不堪铺天盖地的广告骚扰纷纷放弃尺度IE浏览器而利用诸如GoSurf、MyIE2、NetCapter这样的利用IE内核支持多页面并能自动屏蔽广告的软件.据说在行将公布的IE6 sp2中微软也将加入封杀广告窗口功效.这对大大都网民当然是件功德,可关于程序员而言,我们利用弹出窗口的方法与普通广告并没有本质的差别,这样的窗口也会被弹出窗口管理器不分青红皂白的封杀,后来果当然是我们不肯看到的.有没有一个尺度的方法能让窗口正常的弹出呢?这就要求我们理解浏览器封杀广告的原理.普通的广告封杀器利用以下三种方法举行广告过滤:

  (1)、基于窗口标题的封杀方法

  这种封杀方法的原理是按时查抄全部的IE窗口标题,然后于已经有的列表(由程序保护的一个数组列表)来对比,假若有相同的,我们就关闭这个窗口.明显,这种方法有着诸多缺陷,它封杀了全部的弹出的窗口,管得太死,在程序真正利用的很少.不过,根据它举行的变形方法倒利用得相当的广泛.那就是,基于窗口标题名称的智能过滤技术,它按照弹出窗口的标题能否含有关于广告的关键字举行封杀,这为提高过滤效果作出了很好的摸索.

  (2)、基于窗口类和位置的封杀方法

  经过解析发现正常浏览窗口的类名是IEFRAME和CabinetWClass,而广告窗口的类名是CabinetWClass.进一步解析发现:广告窗口的WorkerA类和Shell DocObject View类的rect.top的值是相同的,正常IE窗口的WorkerA类和Shell DocObject View类的rect.top的值是不相同的.按照以上两点便可以书写广告杀手程序了. 事实上,我对此程序的通用性持猜疑态度.因为笔者用Spy++解析发现,在Windows2000( 笔者利用的操作系统)中,IE窗口的类都为IEFrame.同时,由于Win2000是一个基于Unicode代码的操作系统,所以没有WorkerA类,而以WorkerW类取而代之.同时,也不存在rect.top不相同的情形,由于笔者没有WindowsXP操作系统,所以不能针对WindowsXP作进一步的试验.

  (3)、基于IE COM组件的封杀方法

  以上两种方法都是把IE窗口当作一个普通的Windows窗口对待,举行判断的.事实上,IE是一个典型的基于COM组件的浏览器,全部的基于IE内核的浏览器都是包装shdocvw.dll文件,然后书写呼应的BHO代码.只有这样才能做到真正的掌握IE浏览器,而不是办法1、二这样的隔靴搔痒.

  还有一种基于IE内核的弹出窗口封杀办法.它可以在弹出窗口翻开之前加以拦阻.其原理是:每当IE翻开一个新的窗口时刻城市触发NewWindow事件,履行OnNewWindow2([out] IDispatch*, [out] BOOL *bCancel)办法.重载此办法,判断翻开新窗口事件能否发生在浏览页面已经下载完毕之后.假如是,阐明是正常的弹出窗口,反之加以拦阻.

  由于Gosurf这样的浏览器本身就重载了Shocvm.dll组件,所以利用第三种办法就自然成了顺理成章的事.但是在利用历程中有时也会发现,广告过滤不很完善,但原理基本如此


  以上是“精通ASP.NET中弹出窗口技术[网站编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 精通ASP.NET中弹出窗口技术
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .