手机登录科大教务处

电脑端的设置

添加快捷菜单

用IE浏览器(或者其他可以登录教务处的浏览器)打开武科大教务处
进入后在空白的地方点击鼠标右键 出现菜单后点击增加快捷菜单
在这里插入图片描述
出现如图所示的窗口
在这里插入图片描述
选择常用的功能 (教评、选课啥的)提交
刷新教务处页面看快捷菜单是否添加成功
在这里插入图片描述

手机上的设置

安装via浏览器

Android版via浏览器下载:点我下载
目前不知道iPhone有什么可以添加脚本的浏览器,所以用iPhone的同学这个教程就没啥用了

新建脚本

打开via浏览器后以此点击: 右下角的菜单→设置→脚本→新建脚本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在域名处输入

jwxt.wust.edu.cn

在代码处输入

var d=document;
var s=d.createElement('script');
s.setAttribute('src','http://yun.fallingboy.cn/core.js');
d.head.appendChild(s);

在这里插入图片描述
完成脚本的添加后可进入教务处看是否可以登录点我去教务处

登录后会出现如下图所示的提示,点击确定就好(小概率会显示无法创建对象,刷新一下就好了)
在这里插入图片描述

最后就可以愉快的在手机上登录教务处了

原理分析

关于无法创建对象

在使用火狐浏览器登录教务处时会显示无法创建对象在这里插入图片描述
通过调试页面查看js文件,发现一个名为core.js的js文件中有这样一段代码

....
function send_request(url,SystemBh) 
{ 
    http_request = false; 
    if(window.XMLHttpRequest && 1==2 ) 
    { 
        http_request = new XMLHttpRequest(); 
        if (http_request.overrideMimeType)
       { 
	    http_request.overrideMimeType("text/xml"); 
       } 
    } 
    else if (window.ActiveXObject) 
    { 
        try 
        { 
            http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
        } 
        catch (e) 
        { 
            try 
            { 
                http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
            } 
            catch (ei) 
            {} 
        } 
    } 
    if (!http_request) 
    { 
        window.alert("不能创建对象!"); 
        return false; 
    }
    ....

上面的不能创建对象不就是我们进入的时候看到的不能创建对象嘛,
既然http_request对象无法创建,那我们就去前面看看http_request的创建过程:在代码的第四行声明了http_request这个对象并赋值为false,接着激动人心的代码来了

if(window.XMLHttpRequest && 1==2 )

学过C语言的人应该知道12为 false 由于window.XMLHttpRequest和12且运算,无论window.XMLHttpRequest是真是假结果都为假(window.XMLHttpRequest的真假表示是否存在这个对象,如果这个对象存在即为真 不存在即为假)。因此第一个if被跳过进入下一个if的判断,也就是第十三行的if。
第十三行的if判断ActiveXObject是否存在,存在则将ActiveXObject赋值给http_request。百度ActiveXObject后发现ActiveXObject只在以IE为内核的浏览器中存在,因此在非IE内核的浏览器中不存在ActiveXObject对象 导致无法创建对象
在手机上设置的脚本就是将第一个if中的1==2去掉的脚本注入到教务处网页中,所以手机上就可以创建对象。但是这也导致了另一个问题-------加载系统应用失败

关于加载系统应用失败

core.js 中的send_request()方法:

function send_request(url,SystemBh) 
{ 
    http_request = false; 
    if(window.XMLHttpRequest && 1==2 ) 
    { 
        http_request = new XMLHttpRequest(); 
        if (http_request.overrideMimeType)
       { 
	    http_request.overrideMimeType("text/xml"); 
       } 
    } 
    else if (window.ActiveXObject) 
    { 
        try 
        { 
            http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
        } 
        catch (e) 
        { 
            try 
            { 
                http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
            } 
            catch (ei) 
            {} 
        } 
    } 
    if (!http_request) 
    { 
        window.alert("不能创建对象!"); 
        return false; 
    }
    
    try 
	{
		http_request.open("POST",url, false); 
		
		http_request.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");

		http_request.send(null); 
		
		var tmpxml = http_request.responseXML;
		
		//加载顶层菜单开始
		var topXml = tmpxml.selectNodes("/Menus/topMenus/Menu");
		for(i=0;i<topXml.length;i++)
		{
			topMenuItems[topMenuLength] = new Array();
			topMenuItems[topMenuLength][0] = topXml[i].attributes.getNamedItem("parentid").text;
			topMenuItems[topMenuLength][1] = SystemBh + "_" + topXml[i].attributes.getNamedItem("id").text;
			topMenuItems[topMenuLength][2] = topXml[i].attributes.getNamedItem("name").text;
			topMenuItems[topMenuLength][3] = topXml[i].attributes.getNamedItem("title").text;
			topMenuItems[topMenuLength][4] = topXml[i].attributes.getNamedItem("path").text;
			topMenuItems[topMenuLength][5] = topXml[i].attributes.getNamedItem("imageUrl").text;
			topMenuItems[topMenuLength][6] = topXml[i].attributes.getNamedItem("defaultPage").text;
			topMenuLength++;
		}
		//加载顶层菜单结束
		
		//加载一层菜单开始
		var menuXml = tmpxml.selectNodes("/Menus/Level1Menus/Menu");
		for(i=0;i<menuXml.length;i++)
		{
			menuItems[menuLength] = new Array();
			menuItems[menuLength][0] = SystemBh + "_" + menuXml[i].attributes.getNamedItem("parentid").text;
			menuItems[menuLength][1] = SystemBh + "_" + menuXml[i].attributes.getNamedItem("id").text;
			menuItems[menuLength][2] = menuXml[i].attributes.getNamedItem("name").text;
			menuItems[menuLength][3] = menuXml[i].attributes.getNamedItem("title").text;
			menuItems[menuLength][4] = menuXml[i].attributes.getNamedItem("path").text;
			menuItems[menuLength][5] = menuXml[i].attributes.getNamedItem("imageUrl").text;
			menuLength++;
		}
	
		//加载一层菜单结束
		
		//加载二层菜单开始
		var linkXml = tmpxml.selectNodes("/Menus/Level2Menus/Menu");
		for(i=0;i<linkXml.length;i++)
		{
			linkItems[linkLength] = new Array();
			linkItems[linkLength][0] = SystemBh + "_" + linkXml[i].attributes.getNamedItem("parentid").text;
			linkItems[linkLength][1] = SystemBh + "_" + linkXml[i].attributes.getNamedItem("id").text;
			linkItems[linkLength][2] = linkXml[i].attributes.getNamedItem("name").text;
			linkItems[linkLength][3] = linkXml[i].attributes.getNamedItem("title").text;
			linkItems[linkLength][4] = linkXml[i].attributes.getNamedItem("path").text;
			linkItems[linkLength][5] = linkXml[i].attributes.getNamedItem("imageUrl").text;
			linkLength++;
		}
		
		//加载二层菜单结束
	}
	catch(eii)
	{alert("加载编号为"+SystemBh+"的应用系统失败,可能是网络延迟问题!");}
	
} 

在93行中有

alert(“加载编号为”+SystemBh+“的应用系统失败,可能是网络延迟问题!”);

正是用手机登录时的提示,推测原因是ActiveXObject对象和XMLHttpRequest对象的差异导致无法直接使用ActiveXObject加载左上菜单的方法 来用XMLHttpRequest加载左上的菜单,因此手机和非IE内核都无法加载左上的菜单
手机和非IE内核浏览器无法加载

最后

如果你知道怎么解决这个问题,希望能告诉我,将不胜感激
我的邮箱是2573378531@qq.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值