金满仓进销存系统升级之路
突然收到一个加好友的信息,添加之后,其问金满仓进销存能不能修改,现在的版本已经不能用了。
我查了一下官方资料,这是十多年前的一个系统,官方的网址都已经打不开了,客户提供了当时的系统源码,简单看了一下,里面有一个当时我给调试的插件,竟然有我的QQ信息,这样客户找上门来了。
简单配置了一下服务器,主要是装mssql有点麻烦,其他还好

打开一看,界面还是很简单的,但是除了左侧窗口能够点击之外,主窗口的内容都不能打开。
我这才明白客户为什么要升级了
只有在ie8兼容模式下才能打开窗口,但是窗口不是模态的,是那种硬生生的window.open方式打开的
正常浏览器都是打不开的
看了一下源码,其中的js文件中,模态打开的函数竟然使用的是:window.showModalDialog

showModalDialog 早就被淘汰了
于是重写打开窗口的函数,使用模态装口
var overlay = document.createElement('div');
overlay.id = cname + 'modal-overlay';
overlay.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:9999;';
var dialog = document.createElement('div');
dialog.id = cname + 'modal-dialog';
dialog.style.cssText = 'position:fixed;background:white;border:1px solid #ccc;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:10000;';
…………….
使用模态窗口,这样所有的弹窗都正常打开了
测试过程中,又发现,窗口打开没有问题,但是代码中很多地方使用了var otop = top.dialogArguments.document.form_table; 代码获取父窗口的表单对象

dialogArguments,现代浏览器也不支持了,如何实现层与父窗口的通信,又成了一个问题。
经研究发现,可以使用localStorage 设置本地存储与父窗口进行通信数据传递。
于是,在子窗口把数据存储到设定的字段中,在父窗口遍历该字段,根据字段中的数据设定的类别做相应的处理。
至此,整个程序又被盘活了!
操作起来 很是丝滑!

