本码农接到领导任务:需要将紫图高拍仪接入当前web系统.
但是由于本马大哈只埋头苦干,并没有询问开发详细细节,就导致项目发布到生产环境上问题百出.
主要问题有两点:
1.客户使用的浏览器为IE8,IE8在我眼里简直就是上个世纪的浏览器.
2.紫图提供的js文件问题
客户的浏览器一定为IE8,IE8是不支持websocket的,而紫图高拍仪的实现依赖于websocket,故紫图高拍仪无法在客户的电脑上运行.但是请大家看紫图弱智的驱动连接代码:
function ConnectServer(a, b) {"WebSocket" in window ? websocket = new WebSocket(websocketurl) : window.WebSocket ? websocket = new WebSocket(websocketurl) : "MozWebSocket" in window ? websocket = new MozWebSocket(websocketurl) : alert("浏览器版本太低!请使用Chrome、Firefox、IE10+浏览器!"), websocket.onopen = function () {connected = !0, a(b)}, websocket.onclose = function () {connected = !1, onMessage({data: JSON.stringify({FuncName: "Connect", result: 0})})}, websocket.onmessage = function (a) {onMessage(a)}, websocket.onerror = function () {}
}
紫图在连接服务时如发现浏览器不支持websocket,alert提醒用户后竟然没有return,这就导致onopen这个函数报错,导致页面无法正常加载.
修改如下:
function ConnectServer(a, b) {"WebSocket" in window ? websocket = new WebSocket(websocketurl) : window.WebSocket ? websocket = new WebSocket(websocketurl) : "MozWebSocket" in window ? websocket = new MozWebSocket(websocketurl) : function(){alert("浏览器版本太低!请使用Chrome、Firefox、IE10+浏览器!");return;}, websocket.onopen = function () {connected = !0, a(b)}, websocket.onclose = function () {connected = !1, onMessage({data: JSON.stringify({FuncName: "Connect", result: 0})})}, websocket.onmessage = function (a) {onMessage(a)}, websocket.onerror = function () {}
}
我事先是不知道IE8是不支持console的,但是我的代码页面使用了部分console来输出一些关键消息,线上发布一次版本过于耗时,于是想办法热更新JS文件自己在页面加载的时候给window对象予以console的定义:
window.console = window.console || (function () {var c ={}; c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile= c.clear = c.exception = c.trace = c.assert = function(){};return c;
})();
上面代码来自百度"IE8不支持console".
在页面较前部分的script标签引入的任一js文件中加入上面的代码即可解决IE无法console打印的问题.