魔改教务系统JS使其支持Chrome
作者:互联网
(本文原作于2020年2月。现我校已升级教务系统,本文失效。但可供参考。)
我校教务系统(湖南强智公司开发)在非IE浏览器上登录时总会提示"不能创建对象", 主页也不会出现功能菜单。
于是就想着能不能魔改Javascript使其支持非IE浏览器。于是就有了下面这一篇文章内容。
(注:Chrome插件IE Tab可以直接在Chrome上完美运行我校教务系统,这篇文章只是拿来水的)
1.XMLHTTP对象
打开抓包神器Fiddler,设置好监听,然后配置好代理,登录教务系统。(为什么不用Chrome的F12来查JS?因为Fiddler方便)
可以看出,在打开和登录教务系统的时候加载了若干个JS文件。
然后Ctrl+F查找关键字"不能创建对象"
就锁定了/js/core.js
这个文件。然后查看文件详细内容,找到了提示的相关代码:
向前回溯,可以看到http_request
这个变量是一个对象:
这就很好办呀!改一下就好咯。
修改后:(注意新增部分)
即非IE浏览器用XMLHttpRequest初始化一个相应的对象。
然后打开Fiddler,使用AutoResponder功能(也就是请求中的文件替换)把core.js
替换成为本地的版本:
之后再次刷新主页,我们可以发现...确实是可以创建对象了...但是菜单根本加载不出来,对应的还有提示:加载编号为x的应用系统失败,可能是网络延迟问题!
2.selectNodes方法
同样,先定位位置。经过搜索可以发现:
这就是罪魁祸首。向前回溯可以发现这是一个try语句,里面的语句如果发生了错误就会被捕获到,然后到catch块中进行输出。
那么这么一大块内容,
先是利用AJAX获取菜单信息:
再是分层把菜单信息从AJAX获取到的XML中分别提取到不同的数组中:
究竟是哪里出错了呢?
开始逐步调试。
最后发现是selectNodes
方法出了错。
这个方法是IE独享,并且下方提示,替代方法是Document.evaluate()
,那就来看看这个evaluate方法怎么用。
本来想着直接把selectNodes
方法替换一下就好,结果没想到直接表示evaluate
方法根本不支持IE....
所以只能再写一个判断是否IE的方法咯,然后根据判断结构来选择用哪个方法。
改好了以后发现还是不能用!依旧是加载错误。
看了看错误信息以后发现topMenuItems
这个数组是空的!
经过查阅资料后才发现这个XPathResult对象①要用nextIterate()方法进行遍历...并且②最后text属性要变成textContent属性
最终修改如下:
然后把剩下的两层菜单也修改完毕后,刷新页面。
终于可以正常加载图标和菜单了!
然而,当我测试选课功能的时候,超链接进入选课
按下后始终没有反应...
打开Chrome的F12开发者工具可以发现,给了一个错误。Uncaught TypeError: window.showModalDialog is not a function.
经查,showModalDialog
方法作用是打开新窗口。在Chrome37即被废弃。
3.showModalDialog
找到了一个替代函数,放入core.js中,刷新。
然而还是无法点击。
错误依旧,找不到函数。
又在fiddler中看了一眼,发现使用这个函数的页面并未引入core.js....所以放入了jspublic.js中,然后刷新。
最后终于可以用了...但是BUG满满,并且界面也是糊的不成样子...估计是真的太老了罢了。
后记
这个问题其实特别好解决。直接在Chrome上安装插件IE Tab
,然后在其中打开使用教务系统即可。无论是界面的复原程度、简便性和可操作性都比魔改强得多。
这篇文章的主要目的就是娱乐和学习性质的。
标签:...,菜单,魔改,Chrome,JS,教务,js,IE 来源: https://www.cnblogs.com/bytegoing/p/14482917.html