最近在做项目的涉及嵌入旧系统页面部分,前后一个多月时间,里面踩到各种坑,不写篇文章记录一下感觉都对不起这辛酸历程。
1.两个系统js操作跨域问题
一般来说企业应用系统登录成功之后的主要操作界面如下:
可以看到整个操作界面实际上是由多个iframe组成的,我们的需求是嵌入【功能页面显示区域】的页面,但这些页面很多情况下会取父页面上的js变量值,这就需要新系统在嵌入页面时模拟出旧系统父页面上的js变量、函数等供子页面操作。很显然,这里涉及到两个系统的跨域访问问题,刚开始我们认为按照传统的解决方案将两个系统共用同一个根域名即可解决,所以就浮光掠影的点了点几个功能页面,看没问题就pass了。
结果等到后面正式做业务操作时发现许多页面里弹出了模态窗口,并且偷懒直接以当前窗口的window对象作为参数传值,使得在公共页面改写document.domain时出现通过window.dialogArguments获取不到值的问题。搜了一天资料,才发现了这个:
【按微软官方解释,需要1.原有的作为弹出页的页面顶部先自定义一个变量存储dialogArguments,2.不要使用window作为父页面showModelDialog时的入参,改为自定义的对象、数组、字符串等。才能解决这个问题
因为按照现有项目用到的框架,所有jsp页面都会引入一个公共jsp,所以原来设置根域名只需要在两个项目中改两个公共页面即可。但现在发现的这个问题真要按照这个方案解决得修改上千处代码,已经不能忍受了!
搜了三天资料也没想出前端可行的修改方案,为了一劳永逸的解决这个问题,最后决定在后端做文章,即加一个http代理,通过不同URL路径的前缀来区分是访问旧系统还是访问新系统,这样在前端永远是同一web应用,所以也就不存在恼人的各种跨域访问的问题了。
2.url中同名参数多次赋值问题
定下来通过后端http代理来访问新旧系统的策略之后舒服了半天,踩坑之路依旧。首先碰到的是就系统中某些框架页面的实现不够完善,很多页面访问url上存在同一参数赋值两次到url的情况,但一开始我们自己写的http代理的策略是后一次参数赋值会覆盖前一次的。这样就会有一些页面的展示结果跟旧系统里面打开的不一样,后来发现这些页面的java代码里面取参数用到的是request.getParameter,tomcat里面对该方法的说明是这样的:
【Returns the value of a request parameter as a String, or null if the parameter does not exist. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.
You should only use this method when you are sure the parameter has only one value. If the parameter might have more than one value, use getParameterValues(java.lang.String).
If you use this method with a multivalued parameter, the value returned is equal to the first value in the array returned by getParameterValues.
If the parameter data was sent in the request body, such as occurs with an HTTP POST request, then reading the body directly via getInputStream() or getReader() can interfere with the execution of this method.】
看上面蓝色粗体的那句,原来如果url中有同名参数多次赋值的情况下该方法会返回第一次所赋的值!!!
3.诡异的IE开发者工具调试
因为主要做嵌入页面,所以免不了经常用IE11的开发者工具,最常使用的就是【DOM资源管理器】和【网络】,这两块用下来还是很方便和值得信赖的。但在用【调试】的时候发现同一个路径的js文件不知道为什么在选择文件那地方竟然出现很多次:
真是让人醉了,开始以为既然都是同一路径下的文件所以随便选一个在代码执行路径下打断点即可调试,结果不行,最后索性给所有能打开的同一文件实例相同代码行都打了断点,终于可以调试了!!!到现在也没明白为什么IE里面会出现同一js文件的多个实例。
一次又一次填坑之后,世界终于美好了一点点。。。
相关推荐
在网页中嵌入Word或Excel文档,通常是为了提供一种在线预览或编辑的方式,以便用户无需离开网页就能查看和操作这些文件。这涉及到的技术之一就是`dsoframer`控件,它是一个允许网页嵌入Microsoft Office文档的...
HyperledgerComposer上单个城市患者的电子医疗记录保存系统-JavaScript-下载
58速运微服务落地实践之填坑大法 1. 微服务架构概述 微服务架构是一种软件开发技术,它将单个应用程序划分为一组小的服务,每个服务运行在其独立的进程中,并通过轻量级的通信机制进行交互。微服务强调服务的自治...
小U导航网系统-全新的网址导航系统 运行环境:mysql+PHP5.6 注:PHP必须5.6版本,nginx需要手动配置伪静态 上传到网站根目录直接解压,然后访问install进行在线安装即可 源码介绍: V1.7(这是目前的最新版本) 1....
除了基本的翻页功能外,文章还关注了快速跳转至特定页面的需求。这在大量数据展示场景中尤为重要。为实现这一功能,文章提出了以下方案: - **分析原有命令机制**:首先分析了系统提供的翻页命令的工作原理,以便...
总结来说,计算延迟时间和嵌入维度是研究非线性动力系统的基础,它们帮助我们从单个时间序列重建出系统的动态行为。C++和MATLAB提供了强大的工具和库,使得这些复杂的计算变得相对容易。理解并正确应用这些方法,对...
Android系统的多功能单键操控APK是通过将单个物理机械按键的操作和电视Android系统底层的功能菜单APK软件相结合,在电视屏幕相应位置显示对应功能菜单,再通过局部红外触摸方式选择功能菜单,从而改变电视机的控制...
标题中的“给单个文件加密功能强大,非常棒”表明我们正在讨论的是一款专注于加密单个文件或文件夹的软件,可能是一个轻量级的应用,它具有高效且强大的加密能力。这种类型的工具对于保护个人隐私和敏感数据至关重要...
2. **构建嵌入向量**:基于延时时间,将单个时间序列转化为多维向量,形成新的数据集。 3. **计算距离矩阵**:在相空间中,计算所有向量之间的欧氏距离,为后续的嵌入维计算做准备。 4. **嵌入维估计**:使用如...
该系统提供了一种可靠的方法来存储学生记录,并有助于搜索单个学生记录。当您使用此系统时,您可以使用 CRUD 功能安全地管理学生记录。 添加学生记录 添加学生分数 查看学生成绩 显示所有学生分数
1. **文件嵌入**: 文件嵌入的基本思想是将一个或多个文件的数据流嵌入到主文件的结构中,通常不会改变主文件的外观或功能。例如,在文档处理软件中,可以嵌入图片、字体或其他多媒体元素,使得文档自包含,无需额外...
“喜欢单个网页”组件的两个重要的功能是:一是如果喜欢的次数多,表示这篇文章质量高,被大家所喜欢,起到一个推荐的作用;二是用户通过点击喜欢,文章内容就能分享给她的好友,从而利用空间的SNS网络将文章分享给...
本资源是一个针对大学生的网页设计作品,主题围绕热门电影“捉妖记”,旨在教授和实践基本的静态HTML网页制作技能。这个网页设计作业利用了Dreamweaver这一常用的网页设计工具,适合初学者进行学习和参考。以下是这...
单个商品带详情页购买系统源码,单品购买商城源码下载,方便分享和推广。可以在后台编辑生成商品出售详情页,商品可选择到付和线上付款,详情页样式仿淘宝。 功能清晰,可对接商户平台或第三方支付软件。商品被购买...
下面将详细解释如何实现单个生成静态页面的例子。 首先,我们需要了解生成静态页面的基本步骤: 1. **设计动态网页**:创建一个使用动态语言(如PHP、Python或Ruby)构建的网页模板。这个模板会包含HTML结构以及与...
C-C法是由Cao Lai在1997年提出的一种改进的近似方法,旨在解决Takens延迟嵌入定理的问题,该定理指出,混沌系统的动力学可以通过其单个时间序列重构到一个高维空间来无失真地再现。嵌入维数的计算对于数据重构和动力...
1. 整体总共分三界面,一级界面是整体布局,二级界面是单个功能模块,三界面是单个控件。 2. 子控件包括饼图+圆环图+曲线图+柱状图+柱状分组图+横向柱状图+横向柱状分组图+合格率控件+百分比控件+进度控件+设备状态...
报系统单个学校用户PPT教案.pptx
报系统单个学校用户学习课程.pptx
18-单个数码管模拟水流(51单片机C语言实例Proteus仿真和代码)18-单个数码管模拟水流(51单片机C语言实例Proteus仿真和代码)18-单个数码管模拟水流(51单片机C语言实例Proteus仿真和代码)18-单个数码管模拟水流(51...