手邊還有些老系統是用ASP+OCX古法釀造的,一直沿用至今。這樣的設計對新版IE及非IE瀏覽器來說極不友善,但基於改寫成本及效益考量,我想它仍存在繼續活下去的正當性。

話說前陣子公司網路設計做了些調整,近來聽到一些User的哀嚎,抱怨在Client端在更換網域後,原本含有ListView Control(我也不懂為什麼原設計者要這麼寫,不是用<select multiple>就可以解決嗎?)的網頁在瀏覽時出現大紅X,控件無法顯示及使用,但偏偏日期檢視器的OCX卻又操作正常。

我排除問題的過程是:

  1. 先做一個只有ListView OCX的HTML簡化問題並試圖重製錯誤:
    <object id="lsv" codebase="../Somewhere/MSCOMCTL.CAB#version=6.0.88.62" classid="clsid:BDD1F04B-858B-11D1-B16A-00C0F0283628" width="100" height="100"></object>
  2. 發現在特定機器上,這個OCX無法顯示,出現方框紅X,代表物件建立有問題,在其餘機器上則正常顯現。很好,可明確重現的問題,不會太棘手。
  3. 為排除IE安全設定因素的干擾,我寫了一段VBScript
    Set ocx = CreateObject("MSComctlLib.ListViewCtrl.2")
    發現在問題機器上會爆出0x80040112的錯誤而無法建立物件。正常機器則無此狀況。
  4. 查詢0x80040112與License有關,問題的大方向確定,集中火力Google MSCOMCTL.OCX的License相關文章。
  5. 找到這篇Microsoft KB,依上面的指示在Visual Studio.NET 2003的光碟上找到Extra\VB6 Controls\VB6Controls.reg,複製到問題機上匯入。
  6. 匯入完成後重啟IE,莫名其妙出現在網頁裡的ListView控件終於現身了。

Comments

# by FISHMAN

感謝你所提供的"VB6Controls.reg", 解決我的問題!

Post a comment