其他分享
首页 > 其他分享> > 魔改教务系统JS使其支持Chrome

魔改教务系统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