2011年7月2日 星期六

搞定 IE6 程式不能在 IE7/8/9 執行問題

今天下午在病房媽媽打了藥睡著後, 拿出前天 6/30 買的 AOD260 小筆電, 利用其中的 IE8 檢查 2004 年寫的網頁表單製作程式到底是哪裡有問題, 為什麼只能在 IE6 上跑. 很久以前 (就是 IE7 出來的時候), 學弟妹也告訴我, 同樣利用客戶端網頁技術 ADODB/FSO 寫的語音資料處理套件網頁程式也是見到 IE7 以上就無法執行. 今天終於被我查出來了.
 原因很單純, Javascript 原始程式碼只要改一個字元就搞定了. 早知道的話, 學弟妹們就不必辛苦尋找能跑 IE6 的電腦了 .... 殘念 ...
 問題就出在下列兩行 (questionaire.htm) :
 var sys_path=unescape(window.location.pathname);
 var pos=sys_path.lastIndexOf("\\");
 第一行是取得目前網頁所在路徑, 這在 IE6 會傳回例如 "/D:\test\questionaire.htm" 的字串, 但是在 IE7 以上則是傳回全部又斜線分隔之 "/D:/test/questionaire.htm". 第二行是要去除檔名 questionaire.htm 留下路徑, 以便製作 ACCESS 資料庫之存取路徑, 因此在 IE6 要取得右邊算來第一個左斜線之索引, 再利用下列指令達成目的 :
 var pname=sys_path.substring(1,pos+1);
 var conn=new ActiveXObject("ADODB.Connection");
 var strDsn="DRIVER={Microsoft Access Driver (*.mdb)};" +
"DBQ=" + pname + "database.mdb";
 dsn_string.value=strDsn;
conn.Open(strDsn);
 由於 IE7 傳回之路徑全部右斜, 因此 sys_path.lastIndexOf("\\") 這指令就無效了, 而是要改為 sys_path.lastIndexOf("\/"), 也就是將左斜改右斜一切 OK! 卡好! 就差這一個字元整個系統就跑不動!
先前在網路上找了一些文章, 但就是搔不到癢處. 這回 AOD260 一出馬, 前後比對測試一下馬上現出原形, 這台 $6500 買的小筆電可是立了第一功啊! 另外找到存取 ACCESS 的新語法如下, 用來取代上面的舊語法經過測試是 OK 的, 還沒找到左斜右斜問題時, 原以為是 connectiong string 的問題, 改用下面語法後還是不行.
 var conn = new ActiveXObject("ADODB.Connection");
 var connStr="Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source='" + data_source + "';Persist Security Info=False;"
 conn.Open(connStr);
 真是太好了, D260 讓我一箭雙鵰, 一舉解決兩個頭疼問題, 原先已考慮改用 AutoIt 來改寫的, 現在可以先喘口氣了 (語音處理還會繼續).

沒有留言:

張貼留言