.NET Framework 1.1 中 SmartNavigation 的实现

简介:
  SmartNavigation这个Page属性很有意思,他在不改动(其实是改动很小)页面元素布局的情况下,居然可以模拟出非常平滑的“无刷新”页面,为什么这个“无刷新”要阔起来呢?其实他是刷新了的,而且用的也不是什么xmlhttp也不是xmldom技术,它是事实在在的Submit,可能这样是为了浏览器兼容性什么的来考虑的吧。
    SmartNavigation的实现原理,其实和我们在动画绘制中使用的双缓冲技术及其相似。首先说一下他对普通页面的改造,他在普通的.aspx页面的返回结果中,加了两行代码,一个是IFrame,一个是JScript脚本:
...
None.gif < IFRAME  ID ="__hifSmartNav"  NAME ="__hifSmartNav"  STYLE ="display:none"
       
src ="/aspnet_client/system_web/1_1_4322/SmartNav.htm" ></ IFRAME >
...
None.gif < script  language ="JScript"  src ="/aspnet_client/system_web/1_1_4322/SmartNav.js" ></ script >
...
    这中间的IFrame(__hifSmartNav)就相当于动画绘制中的实际绘图表面,在Smart Navigate中,他就是实际的Submit页面和数据接收页面。这一切都是SmartNav.js的杰作,SmartNav.js中使用了一个更有意思的技术,其实是老的不能再老的技术,用现代的话来说就是hook,说远点和Dos下修改中断向量有异曲同工之妙。它是怎么做的呢?其实除了显示输出,一切的操作都克隆到IFrame里去执行去了,因为IFrame对象,和Document对象有着最大的相似性,包括属性和事件等。
    当我们执行enable了SmartNavigation的页面时,它首先被SmartNav.js引导,这个脚本中最关键的一句就是:var rc = window.__smartNav.attachForm();,他的作用就是把我们当前页面上的form,包装到一个叫__smartNav的类中,然后用这个类来操作一切navigate。
    这是SmartNav.js中最关键最精彩的代码:
None.gif         if (snfm.__formAttached ==  truereturn  true;
None.gif        snfm.__formAttached =  true;
None.gif        snfm.attachEvent("onsubmit", window.__smartNav.init);
None.gif        snfm._submit = snfm.submit;
None.gif        snfm.submit = window.__smartNav.submit;
None.gif        snfm.target = window.__smartNav.hifName;
    他完成了form的attach,同时hook了页面的submit事件,还在最后一句把__smartNav中form的target设定到了__hifSmartNav(这就是隐藏的那个IFrame)。如果不改变target,那么submit就把我们的当前form提交了 wink_smile.gif

    说道这儿已经就没有什么好说得了,提交是__hifSmartNav执行的,返回的数据也回到了这个IFrame中,剩下的就是把获得数据写回到我们本来的那个document中去,那些代码比较的复杂,处理的情况也挺多,连标题的更新都是考虑到了的teeth_smile.gif,有兴趣就自己去读读罢。


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
|
18天前
|
存储 IDE C#
C#入门:在JetBrains Rider中创建.Net Framework控制台应用程序,输出“Hello, World!”
C#入门:在JetBrains Rider中创建.Net Framework控制台应用程序,输出“Hello, World!”
50 0
|
1月前
|
开发工具 开发者
Jetbrains Rider:缺少.NET Framework 4.5.2
该文主要针对开发者,指出需下载SDK而非Runtime以进行应用程序开发。当使用Rider打开旧项目出现错误提示缺少.NET Framework 4.5.2时,需从微软官网下载相应版本的SDK(推荐开发版)。安装完成后,可能需要重启Rider以消除波浪线提示。对于.NET Core项目,若提示CLI路径未找到,同样需前往微软官网下载缺失的SDK版本,如.NET Core 3.1。安装完毕后,可考虑配置环境变量。
21 0
|
2月前
|
开发框架 .NET C#
探索VB.NET:了解.NET Framework下的Visual Basic
【4月更文挑战第27天】Visual Basic进化为VB.NET,融入.NET Framework,提供面向对象编程、泛型、LINQ等特性。VB.NET是强类型语言,支持类型推断,通过Windows Forms和WPF构建桌面应用。广泛应用于企业级、Web和数据处理开发,是易学且功能强大的编程工具。随着.NET版本更新,VB.NET的应用仍具价值,适合初学者和资深开发者。
|
2月前
|
数据挖掘 定位技术
.NET Compact Framework下的GPS NMEA data数据分析(二)转
.NET Compact Framework下的GPS NMEA data数据分析(二)转
25 0
|
2月前
|
SQL Windows
保姆级:Windows Server 2012上安装.NET Framework 3.5
保姆级:Windows Server 2012上安装.NET Framework 3.5
178 0
|
2月前
|
Windows
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
533 0
|
2月前
|
C# Windows
C#安装“Windows 窗体应用(.NET Framework)”
C#安装“Windows 窗体应用(.NET Framework)”
87 0
NET Framework安装失败的麻烦
本人机子环境是安装了VS2012,即安装了 .NET Framework4.5,现在要安装AutoCAD2013,而安装CAD2013需要安装4.0的Framework,由于本机已有高版本的Framework,安装自然报错: 又不想来卸载4.5,觉得麻烦,但又想装上CAD2013,唯一的方法是修改Setup.ini初始化文件。
1022 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
114 0
|
2月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
44 0