.NET Framework 1.1 中 SmartNavigation 的实现

简介:
  SmartNavigation这个Page属性很有意思,他在不改动(其实是改动很小)页面元素布局的情况下,居然可以模拟出非常平滑的“无刷新”页面,为什么这个“无刷新”要阔起来呢?其实他是刷新了的,而且用的也不是什么xmlhttp也不是xmldom技术,它是事实在在的Submit,可能这样是为了浏览器兼容性什么的来考虑的吧。
    SmartNavigation的实现原理,其实和我们在动画绘制中使用的双缓冲技术及其相似。首先说一下他对普通页面的改造,他在普通的.aspx页面的返回结果中,加了两行代码,一个是IFrame,一个是JScript脚本:
...
< IFRAME  ID ="__hifSmartNav"  NAME ="__hifSmartNav"  STYLE ="display:none"
       
src ="/aspnet_client/system_web/1_1_4322/SmartNav.htm" ></ IFRAME >
...
< 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中最关键最精彩的代码:
         if (snfm.__formAttached ==  truereturn  true;
        snfm.__formAttached =  true;
        snfm.attachEvent("onsubmit", window.__smartNav.init);
        snfm._submit = snfm.submit;
        snfm.submit = window.__smartNav.submit;
        snfm.target = window.__smartNav.hifName;
    他完成了form的attach,同时hook了页面的submit事件,还在最后一句把__smartNav中form的target设定到了__hifSmartNav(这就是隐藏的那个IFrame)。如果不改变target,那么submit就把我们的当前form提交了

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


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

目录
相关文章
|
1月前
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
42 1
|
27天前
|
开发框架 缓存 监控
NET Framework 到 .NET 5/6 的迁移是重大的升级
本文详细介绍了从 .NET Framework 4.8 迁移到 .NET 5/6 的过程,通过具体案例分析了迁移策略与最佳实践,包括技术栈评估、代码迁移、依赖项更新及数据库访问层的调整,强调了分阶段迁移、保持代码可维护性及性能监控的重要性。
46 3
|
1月前
|
机器学习/深度学习 编解码 算法
【小样本图像分割-4】nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation
《nnU-Net: 自适应框架用于基于U-Net的医学图像分割》是一篇2018年的论文,发表在Nature上。该研究提出了一种自适应的医学图像分割框架nnU-Net,能够自动调整模型的超参数以适应不同的数据集。通过2D和3D U-Net及级联U-Net的组合,nnU-Net在10个医学分割数据集上取得了卓越的性能,无需手动调整。该方法强调数据增强、预处理和训练策略等技巧,为医学图像分割提供了一个强大的解决方案。
64 0
【小样本图像分割-4】nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
3月前
|
开发框架 缓存 前端开发
实战.NET Framework 迁移到 .NET 5/6
从.NET Framework 迁移到.NET 5/6 是一次重要的技术革新,涵盖开发环境与应用架构的全面升级。本文通过具体案例详细解析迁移流程,包括评估现有应用、利用.NET Portability Analyzer 工具识别可移植代码、创建新项目、逐步迁移代码及处理依赖项更新等关键步骤。特别关注命名空间调整、JSON 序列化工具更换及数据库访问层重构等内容,旨在帮助开发者掌握最佳实践,确保迁移过程平稳高效,同时提升应用性能与可维护性。
121 2
|
3月前
|
开发框架 JSON 监控
实战指南:从 .NET Framework 迁移到 .NET 5/6 的策略与最佳实践
【8月更文挑战第28天】从 .NET Framework 迁移到 .NET 5/6 是一次重要的技术升级,涉及开发环境与应用架构的改进。本文通过具体案例分析,介绍迁移策略与最佳实践,帮助开发者顺利完成转变。
79 1
|
3月前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
41 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
58 0